使用JsonSerializer序列化JsonObject的ServiceStack会生成无效的json Date

时间:2014-10-29 19:37:02

标签: c# json servicestack

我正在使用服务ServiceStack JsonObject.Parse来反序列化未知类型。

之后我使用ServiceStack JsonSerializer.SerializeToString重新序列化为json。

对象上有一个DateTime属性,当它被重新序列化时,json的日期不正确

这是示例代码

void Main()
{
    var p = new Person { Name = "full name", Age = new DateTime(2000,1,1) };
    var json = ServiceStack.Text.JsonSerializer.SerializeToString(p);
    Console.WriteLine(json);

    var jo = ServiceStack.Text.JsonObject.Parse(json);
    var json2 = ServiceStack.Text.JsonSerializer.SerializeToString(jo);
    Console.WriteLine(json2);
}

class Person
{
    public string Name {get;set;}
    public DateTime Age {get;set;}
}

和结果(注意日期周围的额外斜线)

{"Name":"full name","Age":"\/Date(946713600000-0000)\/"}
{"Name":"full name","Age":"\\/Date(946713600000-0000)\\/"}

1 个答案:

答案 0 :(得分:1)

这是因为JsonObject只是Dictionary<string,string>的包装,即:

public class JsonObject : Dictionary<string, string> { ... }

因此,当序列化JsonObject时,日期值会被序列化为string值,\会被适当地转义。

不幸的是,WCF的JSON格式选择使用\/Date(..)\/格式,因为它不太可能自然地生成,因为不需要正斜杠(即/)成为或正常逃脱。

一种解决方案是只更改使用的JSON日期格式,即:

JsConfig.DateHandler = DateHandler.ISO8601