反序列化具有固定字段名稱的小型固定大小固定結構JSON字符串非常簡單:只需定義一個包含所有字段的類(使用正確的類型和名稱,全部在編譯時已知)。如何使用變量名反序列化可變大小的JSON字符串
反序列化可變大小的重複嵌套對,有點更具挑戰性,但可以在類內的List<>的幫助下完成。
但是,在編譯時未知字段的名稱時,我該怎麼辦?例如:
{
"container":{
"GD01AB491103":{
"field_id1":11,
"field_id2":12,
"field_id3":13,
"field_id4":"fourteen"
},
"DC01AB491103":{
"field_id1":21,
"field_id2":22,
"field_id3":23,
"field_id4":"twenty four"
},
"GH01AB451101":{
"field_id1":31,
"field_id2":32,
"field_id3":33,
"field_id4":"thirty four"
}
.
.
.
},
"terminator"
}
如何反序列化這樣的字符串?
(最好用.NET的JavaScriptSerializer但如果它是太弱/無力,我可能需要採取其他的東西)
編輯:爲了澄清挑戰的性質:在上面的例子中,爲了定義一個類:
public class ??????
{
public int field_id1 {get;set;}
public int field_id2 {get;set;}
public int field_id3 {get;set;}
public string field_id4 {get;set;}
}
我需要先查詢JSON字符串,然後在運行時使用這些變量名類對象來構建類(reflection?)?看起來太麻煩了......也許有一種更好的方法?
或者也許類/字段名稱與.NET的JavaScriptSerializer不相關,並且所有事情都是類型? (當然,正確的結構)
謝謝。在我尋求使這個過程更簡單的方法的時候,我發現了這個很棒的網站,它從一個給定的JSON字符串中自動構建C#類:http://json2csharp.com/ –
實際上,它可以與[JSON.net](http: /stackoverflow.com/a/1212115/562776)和.NET的[JavaScriptSerializer](http://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer%28v=vs.100% 29.aspx)。 –
是的,它應該是非常獨立的序列化程序,我唯一擔心的就是尾隨的「終止符」條目,因爲它不是有效的JSON,但只要這只是一個提示,那麼你應該沒問題。 FWIW如果你有選擇(而不是太細微的.net泛型)我會建議通過JavaScriptSerializer的JSON.net出於性能原因。 –