我已经在网上搜索了大量关于此事的信息,但大多数结果都是关于创建WCF服务或服务在您控制下的情况。
我正在为一个不在我控制范围内的RESTful JSON服务构建WCF客户端代理。我正在使用基本的ServiceContract/DataContract模式,并尝试让框架尽可能地完成更多的工作。
大多数情况下这很好用,但来自这个外部服务的所有日期时间字段都是特定格式,例如:
我想知道的是,在哪里可以添加一些代码来定义WCF如何反序列化lastmodified字段(将字符串转换为DateTime对象)?
或者更好的方法是,定义如何反序列化所有数据合同的DateTime DataMembers。我不想有很多重复的代码。
我也不想使用第三方反序列化器,也不想通过自定义反序列化方法来处理其他所有内容,如果可以避免的话。
我正在为一个不在我控制范围内的RESTful JSON服务构建WCF客户端代理。我正在使用基本的ServiceContract/DataContract模式,并尝试让框架尽可能地完成更多的工作。
大多数情况下这很好用,但来自这个外部服务的所有日期时间字段都是特定格式,例如:
{"SomeObject":
{"details":"blue and round", "lastmodified":"2013/01/02 23:14:55 +0000"}
}
因此,我得到了一个错误:
反序列化MyNamespace.SomeObject类型对象时发生错误。 DateTime内容 '2013/01/02 23:14:55 +0000' 不以'/Date('开始且不以')/'结尾,这是JSON所要求的。'
我的数据合同是:
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对象)?
或者更好的方法是,定义如何反序列化所有数据合同的DateTime DataMembers。我不想有很多重复的代码。
我也不想使用第三方反序列化器,也不想通过自定义反序列化方法来处理其他所有内容,如果可以避免的话。