通过WCF无法识别的ISO-8601日期时间格式字段

时间:2013-12-01 15:43:13

标签: wcf rest

我有一个简单的WCF操作契约,它接受JSON请求格式和一个名为“OrderDto”的自定义WCF DataContract类,它有一个名为“OrderDate”的DateTime数据成员属性:

[DataContract]
public class OrderDto
{
    [DataMember]
    public long OrderID { get; set; }

    [DataMember]
    public DateTime OrderDate { get; set; }
}

服务操作如下:

[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, UriTemplate = "CreateOrder")]
void CreateOrder(OrderDto order);

要测试该服务操作,我使用的是 Fiddler 工具,而不是 .NET客户端源代码。这是因为,该服务不仅会被.NET客户端代码使用,还会被其他非.NET客户端/平台(如Object-C)使用(因此,我更喜欢从Object-C代码传递标准ISO-8601日期时间时间。 )。

在Fiddler中,如果我为请求体创建一个JSON字符串,如:

{
          "OrderID":0,"OrderDate":"/Date(1383368400000-0500)/"
}

然后WCF工作正常,DateTime数据成员属性绑定正常。但是当我按照ISO-8601格式更改请求正文的JSON字符串中“OrderDate”属性的值时:

{
          "OrderID":0,"OrderDate":"2013-11-02T00:00:00"
}

然后我在服务跟踪日志文件中收到错误:

There was an error deserializing the object of type OrderDtoTEMP. DateTime content '2013-10-25T00:00:00' does not start with '\/Date(' and end with ')\/' as required for JSON

我会将字符串类型用于数据成员属性“OrderDate”,并要求WCF使用者从其源代码中使用ISO-8601字符串。但我更喜欢该数据成员使用强类型 DateTime ,并让WCF使用者传递ISO-8601日期时间。

我的问题:当请求正文采用JSON格式时,如何修改WCF代码以接受ISO-8601数据时间?

P.S。

顺便说一下,字符串“/ Date(1383368400000-0500)/”中格式为“1383368400000-0500”的是什么?剔?

0 个答案:

没有答案