将字符串解析为对象
本文关键字:对象 字符串 | 更新日期: 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
}
}
}