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

我已经在网上搜索了这方面的信息,但大多数结果都是关于创建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.’.

我的数据是:

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对象)?

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

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

解决方法

我能想到的两件事:

>将LastModified更改为字符串,然后自己将其转换为Datetime对象.这意味着在对象上为相同的数据公开两个属性.>编写IdispatchMessageInspector以在反序列化发生之前拦截消息,并使用正则表达式按原始消息.它将为您服务中的所有日期提供一站式解决方案.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...