我正在使用服务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)\\/"}
答案 0 :(得分:1)
这是因为JsonObject
只是Dictionary<string,string>
的包装,即:
public class JsonObject : Dictionary<string, string> { ... }
因此,当序列化JsonObject
时,日期值会被序列化为string
值,\
会被适当地转义。
不幸的是,WCF的JSON格式选择使用\/Date(..)\/
格式,因为它不太可能自然地生成,因为不需要正斜杠(即/
)成为或正常逃脱。
一种解决方案是只更改使用的JSON日期格式,即:
JsConfig.DateHandler = DateHandler.ISO8601