我在网上搜索了这方面的信息,但大多数结果都是关于创建 WCF 服务或服务在您控制之下的情况。
我正在为 RESTful JSON 服务构建 WCF 客户端代理,这是我无法控制的。我正在使用基本的 ServiceContract/DataContract 模式,并尝试让框架完成尽可能多的工作。
大多数情况下,这工作正常,但来自此外部服务的所有日期时间字段都采用特定格式,例如
{"SomeObject":
{"details":"blue and round", "lastmodified":"2013/01/02 23:14:55 +0000"}
}
所以我得到一个错误:
反序列化 MyNamespace.SomeObject 类型的对象时出错。日期时间内容“2013/01/02 23:14:55 +0000”未按照 JSON 的要求以“/Date(”开头并以“)/”结尾。”。
我的数据合同是:
namespace Marshmallow.WebServices.ServiceModels
{
[DataContract]
public class SomeObject
{
[DataMember(Name = "details")]
public string Details { get; set; }
[DataMember(Name = "lastmodified")]
public DateTime LastModified { get; set; }
}
}
我的服务合同是:
[ServiceContract]
public interface ICoolExternalApi
{
[OperationContract]
[WebGet(UriTemplate = "/something.json",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped)]
[return: MessageParameter(Name = "SomeObject")]
SomeObject GetAccount();
}
我想知道的是,我可以在哪里粘贴一些代码来定义 WCF 应如何反序列化 LastModified 字段(从字符串中创建一个 DateTime 对象)?
或者更好的是,定义如何反序列化我的所有 DataContract 的所有 DateTime 数据成员。我不想有很多重复的代码。
我也不想诉诸于某些第三方反序列化器,也不想开始将其他所有内容都通过自定义反序列化方法(如果可以避免的话)。