我在控制器上收到了这个字符串:
"[{\"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;
}
}
当我尝试转换字符串时,我都遇到了错误。
我的问题是,我怎样才能使这个工作?
对于我的字符串,哪种方法最符合我的需求?
答案 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
}
}
}