2014-10-29 73 views
0

我正在使用ServiceStack JsonObject.Parse來反序列化未知類型。ServiceStack使用JsonSerializer序列化JsonObject產生無效的json日期

之後,我使用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

這是由於JsonObject只是作爲一個包裝周圍Dictionary<string,string>,即:

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

所以當JsonObject被序列化的日期值作爲string值,其中\得到適當逃脫,而不是串行化。

不幸的是WCF的JSON格式選擇使用\/Date(..)\/格式,因爲它不太可能自然生成,因爲正斜槓(即/)不需要或通常轉義。

一個解決方法就是改變使用JSON日期格式,即:

JsConfig.DateHandler = DateHandler.ISO8601 
+0

不幸的是,原來的JSON消息是序列化與WCF正如你所指出。此外,在鏈中,這些消息被進程反序列化,這些進程綁定使用XmlObjectSerializer派生類,如DataContractJsonSerializer – ObeseCoder 2014-10-30 18:44:28

相關問題