9

我有一個JSON字符串,看起來像:使用ServiceStack.Text反序列化JSON字符串反對

"{\"Id\":\"fb1d17c7298c448cb7b91ab7041e9ff6\",\"Name\":\"John\",\"DateOfBirth\":\"\\/Date(317433600000-0000)\\/\"}" 

我試圖把它反序列化到object(我實現緩存接口)

我有麻煩的是,當我使用

JsonSerializer.DeserializeFromString<object>(jsonString); 

它回來作爲

「{ID:6ed7a388b1ac4b528f565f4edf09ba2a,名稱:約翰,出生日期:/日期(317433600000-0000)/}」

是嗎?

我不能斷言任何東西...我也不能使用動態關鍵字....

有沒有辦法從ServiceStack.Text庫返回一個匿名對象?

回答

15

你不能反序列化成一個對象,因爲它不知道要序列化成什麼類型​​,所以它把它作爲一個對象的字符串。

考慮使用ServiceStack's dynamic APIs反序列化任意JSON,如:

var json = @"{\"Id\":\"fb1d17c7298c448cb7b91ab7041e9ff6\", 
      \"Name\":\"John\",\"DateOfBirth\":\"\\/Date(317433600000-0000)\\/\"}"; 

var obj = JsonObject.Parse(json); 
obj.Get<Guid>("Id").ToString().Print(); 
obj.Get<string>("Name").Print(); 
obj.Get<DateTime>("DateOfBirth").ToLongDateString().Print(); 

或解析成動態:

dynamic dyn = DynamicJson.Deserialize(json); 
string id = dyn.Id; 
string name = dyn.Name; 
string dob = dyn.DateOfBirth; 
"DynamicJson: {0}, {1}, {2}".Print(id, name, dob); 

另一種方法是,告訴ServiceStack到對象類型轉換成詞典,如:

JsConfig.ConvertObjectTypesIntoStringDictionary = true; 
var map = (Dictionary<string, object>)json.FromJson<object>(); 
map.PrintDump(); 
+0

看起來不錯...當我這樣做時,我的對象的「屬性」回來了(例如)爲:[0] {[Name,John]} - 一個鍵/值的數組...是對的嗎? – Alex