1

我使用了这个有用的 JQuery 函数来序列化嵌套元素。问题是如何使用 c# 反序列化它。

下面的代码给出

没有为“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 级深如果解决方案是递归的,我怎么知道元素的深度

顺便说一句,类可以像这样引用自己

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

1 回答 1

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; }
}

然后,您应该能够使用 Deserialize 方法获取 foo 的实例:

var myFoo = new JavaScriptSerializer().Deserialize<foo>(json);
于 2012-06-26T16:25:05.800 回答