2016-05-13 2 views
0

Ich spreche mit einem Webdienst von Xamarin. Es wird Tage, nach unten über den Draht in JSON, in ISO-8601-Format, wie das Senden:ServiceStack.Text in .NET, das geschachtelte Datetime nicht deserialisiert

"2016-05-13T16: 02: 47,480 bis 07: 00"

Wenn ich versuche nur deserialisieren einzelnes Datum, es funktioniert gut. Aber wenn die DateTime ein Member der Klasse ist, funktioniert es nicht. Kein Fehler ist gegeben. Hier ist ein Beispielcode:

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>(); 
} 

Irgendwelche Ideen? Ich sehe keinen Fehler, erhalte nur ein neues TestDate-Objekt ohne das Datum zu setzen.

Antwort

0

ServiceStack Text Serializer nicht serialisiert wie erwartet:

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"} 

und deserialisiert korrekt:

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

Ok ich habe keine Kontrolle über den Web-Service, irgendwelche Ideen für den besten Weg, um es zu analysieren ? Wie kommt es, dass es mit einem einzigen Datum funktioniert? –

+0

@DaveVronay Es wird standardmäßig analysiert, ohne den DateHandler zu ändern. Außerdem sieht es so aus, als ob Sie eine sehr alte Version von ServiceStack.Text verwenden, in der der 'JsonDateHandler' -Typ nicht mehr existiert. – mythz

+0

Auch ich habe gerade die Seite überprüft, die Sie verknüpft haben, und es scheint, dass die ISO 8601 Zeitzonen unterstützt ... https://en.wikipedia.org/wiki/ISO_8601#Time_zone_designators –

Verwandte Themen