gpt4 book ai didi

json - WCF 客户端如何从 JSON 响应反序列化不兼容的日期格式?

转载 作者:行者123 更新时间:2023-12-04 12:42:00 26 4
gpt4 key购买 nike

我已经在网上搜索了有关这方面的信息,但大多数结果都是关于创建 WCF 服务或服务在您的控制之下的情况。

我正在为我无法控制的 RESTful JSON 服务构建 WCF 客户端代理。我正在使用基本的 ServiceContract/DataContract 模式,并试图让框架完成尽可能多的工作。

大多数情况下,这工作正常,但是来自此外部服务的所有日期时间字段都采用特定格式,例如

{"SomeObject": 
{"details":"blue and round", "lastmodified":"2013/01/02 23:14:55 +0000"}
}

所以我得到一个错误:

There was an error deserializing the object of type MyNamespace.SomeObject. DateTime content '2013/01/02 23:14:55 +0000' does not start with '/Date(' and end with ')/' as required for JSON.'.



我的数据契约(Contract)是:
namespace Marshmallow.WebServices.ServiceModels
{
[DataContract]
public class SomeObject
{
[DataMember(Name = "details")]
public string Details { get; set; }

[DataMember(Name = "lastmodified")]
public DateTime LastModified { get; set; }
}
}

我的服务契约(Contract)是:
[ServiceContract]
public interface ICoolExternalApi
{
[OperationContract]
[WebGet(UriTemplate = "/something.json",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped)]
[return: MessageParameter(Name = "SomeObject")]
SomeObject GetAccount();
}

我想知道的是,我可以在哪里粘贴一些代码来定义 WCF 应该如何反序列化 lastmodified 字段(从字符串中创建一个 DateTime 对象)?

或者更好的是,定义如何为我的所有 DataContracts 反序列化所有 DateTime DataMembers。我不想要很多重复的代码。

如果可以避免,我也不想求助于某些第三方反序列化器,也不想开始通过自定义反序列化方法放置其他所有内容。

最佳答案

我能想到的两件事:

  • 将 LastModified 更改为字符串,然后自己将其转换为 Datetime 对象。不过,这意味着要为对象上的相同数据公开两个属性。
  • 编写一个 IDispatchMessageInspector 以在反序列化发生之前拦截消息并使用正则表达式处理原始消息。它将为您服务中的所有日期提供一站式解决方案。
  • 关于json - WCF 客户端如何从 JSON 响应反序列化不兼容的日期格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14159097/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com