2016-05-13 52 views
0

我正在與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對象。

回答

0

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 –