2016-05-13 2 views
0

Я говорю с веб-службой от Xamarin. Он посылает даты вниз по проволоке в формате JSON, в формате ISO-8601, как это:ServiceStack.Text в .NET не deserializing вложенное datetime

"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 Текст Serializer делает сериализации, как и ожидалось:

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

Ok я не имеют контроля над веб-службы, любые идеи наилучшим образом, чтобы разобрать его ? Кроме того, как это работает с одной датой? –

+0

@DaveVronay Он анализирует по умолчанию, не меняя DateHandler, также похоже, что вы используете очень старую версию ServiceStack.Text, где тип 'JsonDateHandler' больше не существует. – mythz

+0

Также я только что проверил связанную вами страницу, и кажется, что ISO 8601 поддерживает часовые пояса ... https://en.wikipedia.org/wiki/ISO_8601#Time_zone_designators –

Смежные вопросы