2013-08-20 159 views
0

我試圖創建用於具有動態列如下所示如何反序列化JSON字符串?

[{"DId":0,"DData":[{"Date":"","C0":{"D":"National","Id":"National"},"C1":{"D":"National","Id":"National"},"C2":{"D":"National","Id":"National"}},{"Date":"1/2/2010","C0":{"D":0.74,"Id":1334337,"Dirty":"False"},"C1":{"D":0.6,"Id":1334597,"Dirty":"False"},"C2":{"D":1,"Id":1334857,"Dirty":"False"}}]}] 

正如我已經強調的列(C *)它們是動態的,例如我可以有JSON如下,其中如下JSON字符串的模型我剛纔兩列

[{"DId":0,"DData":[{"Date":"","C0":{"D":"National","Id":"National"},"C1":{"D":"National","Id":"National"}},{"Date":"1/2/2010","C0":{"D":0.74,"Id":1334337,"Dirty":"False"},"C1":{"D":0.6,"Id":1334597,"Dirty":"False"}}]}] 

C0,C1,C2 ....是動態的。

我想建立一個通用模型來反序列化我的JSON字符串。現在我有我的模型如下

public class C0 
{ 
    public object D { get; set; } 
    public object Id { get; set; } 
    public string Dirty { get; set; } 
} 

public class C1 
{ 
    public object D { get; set; } 
    public object Id { get; set; } 
    public string Dirty { get; set; } 
} 

public class C2 
{ 
    public object D { get; set; } 
    public object Id { get; set; } 
    public string Dirty { get; set; } 
} 

public class DData 
{ 
    public string Date { get; set; } 
    public C0 C0 { get; set; } 
    public C1 C1 { get; set; } 
    public C2 C2 { get; set; } 
} 

public class Model 
{ 
    public int DId { get; set; } 
    public List<DData> DData { get; set; } 
} 

正如我上面提到的分佈數據可以有動態列。任何幫助,我真的很感激。謝謝。

+3

你爲什麼試圖自己反序列化JSON?使用[Json.Net](http://james.newtonking.com/projects/json-net.aspx)。 – gunr2171

+0

您可以使用現有的JSON庫(NewtonSoft)。 – Krishna

+0

學校任務? – Marcus

回答

0

的祕訣就是保持反序列化JSON在最一般的形式可能:

Dictionary<string, object> theData= new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(jsonString); 

System.Collections.ArrayList dData= (System.Collections.ArrayList)theData["DData"]; 

foreach (Dictionary<string, object> data in dData) 
{ 
string date = (string)data["Date"]; 

Dictionary<string, object> cZeroNode = (Dictionary<string, object>)data["C0"]; 

string d = (string)cZeroNode["D"]; 
string id = (string)cZeroNode["Id"]; 
} 

Deserialize()的調用創建的Dictionary<string, object>樹,你可以隨意穿越。