将字符串解析为对象

时间:2014-12-14 15:50:18

标签: c# asp.net json

我在控制器上收到了这个字符串:

"[{\"id\":12},{\"id\":2,\"children\":[{\"id\":3},{\"id\":4}]}]"

我想解析这个,并在其他foreach中创建一个foreach以获得父母和孩子。

我一直在尝试这个:

var object = JsonConvert.DeserializeObject<MenuJson>(json);

其中MenuJson是:

public class MenuJson
{
    [JsonProperty("id")]
    public string id { get; set; }

    [JsonProperty("children")]
    public List<string> children { get; set; }
}

我得到了这个错误:

无法将当前JSON数组(例如[1,2,3])反序列化为类型'AIO.Controllers.AdminMenuController + MenuJson',因为该类型需要一个JSON对象(例如{“name”:“value”})来正确地反序列化。

要修复此错误,请将JSON更改为JSON对象(例如{“name”:“value”})或将反序列化类型更改为数组或实现集合接口的类型(例如ICollection,IList)可以从JSON数组反序列化的列表。 JsonArrayAttribute也可以添加到类型中,以强制它从JSON数组反序列化。

路径'',第1行,第1位。

我尝试了其他方法:

var objects = JsonConvert.DeserializeObject<JObject>(json);
foreach (var property in objects)
{
    var id = property.Value;
    foreach (var innerProperty in ((JObject)property.Value).Properties())
    {
        var child = property.Value;
    }
}

当我尝试转换字符串时,我都遇到了错误。

我的问题是,我怎样才能使这个工作?

对于我的字符串,哪种方法最符合我的需求?

2 个答案:

答案 0 :(得分:1)

你试过这个吗?

public class MenuJson
{
    [JsonProperty("id")]
    public string id { get; set; }

    [JsonProperty("children")]
    public List<MenuJson> children { get; set; }
}

var list = JsonConvert.DeserializeObject<List<MenuJson>>(json);

答案 1 :(得分:1)

这是一个有效的例子:

public void Test()
    {
        string json = "[{\"id\":12},{\"id\":2,\"children\":[{\"id\":3},{\"id\":4}]}]";

        var objects = JsonConvert.DeserializeObject<List<MenuJson>>(json);

        foreach (var property in objects)
        {
            var id = property.id;
            foreach (var child in property.children)
            {
                //child
            }
        }
    }