将字符串解析为对象

本文关键字:对象 字符串 | 更新日期: 2023-09-27 18:34:09

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

"[{'"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;
    }
}

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

我的问题是,我怎样才能让它工作?

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

将字符串解析为对象

你试过这个吗?

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

这是一个工作示例:

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