.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
好吧,我没有对Web服务的控制,最好的方式任何想法来分析它?另外,它如何与一个日期一起工作? –
@DaveVronay它在默认情况下解析并不改变DateHandler,它看起来像你正在使用一个非常旧版本的ServiceStack.Text,其中'JsonDateHandler'类型不再存在。 – mythz
而且我只是检查你链接的页面,似乎ISO 8601不支持时区... https://en.wikipedia.org/wiki/ISO_8601#Time_zone_designators –