2012-06-26 104 views
1

我已使用this有用的JQuery函數序列化嵌套元素。問題是如何使用c#反序列化它。Deserialise使用C#嵌套HTML元素JSon

下面的代碼給出

類型System.Collections.Generic.IList`的」定義無參數的構造函數

string json = @"{""root"":{""id"":""main"",""text"":""150px"",""children"": 
    [{""id"":""divcls"",""text"":""50px"",""children"": 
    [{""id"":""qs1"",""text"":""0px"",""children"":[]}]}, 
    {""id"":""divcls2"",""text"":""50px"",""children"":[]}, 
    {""id"":""divcls3"",""text"":""50px"",""children"":[]}]}}"; 

IList<Commn.main1> objs = new JavaScriptSerializer() 
    .Deserialize<IList<Commn.main1>>(json); 
string blky = ""; 

foreach (var item in objs) 
{ 
    blky += item.id; 
} 
Label1.Text = Convert.ToString(blky); 

public class main1 
{ 
    public string id { get; set; } 
    public string text { get; set; } 
    public sub1 children { get; set; } 
} 

public class sub1 
{ 
    public string Qid { get; set; } 
    public string Qval { get; set; } 
} 

我的JSON是隻有2級別deeep如果解決方案是遞歸的我怎麼能知道元件

深度順便說可以類引用本身這樣

public class main1 
{ 
    public string id { get; set; } 
    public string text { get; set; } 
    public main1 children { get; set; } 
} 

回答

1

首先,是一個類可以引用自己。在你的情況下,你需要有一個main1 []屬性來表示它的子節點。

public class main1 
{  
    public string id { get; set; } 
    public string text { get; set; } 
    public main1[] children { get; set; } 
} 

接下來,你的JSON字符串不僅包含MAIN1對象,而且還與類型MAIN1的「根」屬性某些其他物體。這是完全正常的,但你需要另一個類反序列化到:

public class foo 
{ 
    public main1 root { get; set; } 
} 

然後,您應該能夠使用反序列化方法來獲取FOO的一個實例:

var myFoo = new JavaScriptSerializer().Deserialize<foo>(json); 
+0

非常感謝配音 –