ServiceStack使用JsonSerializer序列化JsonObject会产生无效的json日期
本文关键字:无效 json 日期 使用 JsonSerializer 序列化 JsonObject ServiceStack | 更新日期: 2023-09-27 18:28:16
我正在使用ServiceStack JsonObject.Passe服务来反序列化未知类型。
之后,我使用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)''/"}
这是因为JsonObject
只是Dictionary<string,string>
的包装器,即:
public class JsonObject : Dictionary<string, string> { ... }
因此,当JsonObject
被序列化时,日期值被序列化为string
值,其中'
被适当地转义。
不幸的是,WCF的JSON格式选择使用'/Date(..)'/
格式,因为它不太可能自然生成,因为不需要或通常转义正斜杠(即/
)。
一种解决方案是只更改所使用的JSON日期格式,即:
JsConfig.DateHandler = DateHandler.ISO8601