.NET中的ServiceStack.Text不反序列化嵌套的日期时间

问题描述:

我正在与Xamarin的Web服务交谈。它在JSON向下发送日期过线,在ISO-8601格式,例如:.NET中的ServiceStack.Text不反序列化嵌套的日期时间

“2016-05-13T16:02:47.480-07:00”

如果我尝试只是一个反序列化单日期,它工作正常。但是当DateTime是类的成员时,它不起作用。没有错误给出。以下是一些示例代码:

using ServiceStack.Text; 

class TestDate { 
    public DateTime testDate; 
} 

void Test() { 
    JsConfig.DateHandler = JsonDateHandler.ISO8601; 

    // this works just fine: 
    String dateString = "2016-05-13T16:02:47.480-07:00"; 
    DateTime theDate = dateString.FromJson<DateTime>(); 

    // this does not deserialize 
    String testStr = "{\"testDate\":\"2016-05-13T16:02:51.923-07:00\"}"; 
    TestDate tester = testStr.FromJson<TestDate>(); 
} 

任何想法?我没有看到任何错误,只是在没有设置日期的情况下获取新的TestDate对象。

ServiceStack文本序列化程序序列化预期:

JsConfig.DateHandler = ServiceStack.Text.DateHandler.ISO8601; 

var dto = new TestDate { testDate = new DateTime(2016, 05, 13, 16, 02, 47, 480) }; 
var json = dto.ToJson(); 
json.Print(); //= {"testDate":"2016-05-13T16:02:47.4800000"} 

和正确反序列化:

var fromJson = json.FromJson<TestDate>(); 
Assert.That(fromJson.testDate, Is.EqualTo(dto.testDate)); //= true 
+0

好吧,我没有对Web服务的控制,最好的方式任何想法来分析它?另外,它如何与一个日期一起工作? –

+0

@DaveVronay它在默认情况下解析并不改变DateHandler,它看起来像你正在使用一个非常旧版本的ServiceStack.Text,其中'JsonDateHandler'类型不再存在。 – mythz

+0

而且我只是检查你链接的页面,似乎ISO 8601不支持时区... https://en.wikipedia.org/wiki/ISO_8601#Time_zone_designators –