Я получаю эту строку на моем контроллере:
"[{\"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), например List, который может десериализоваться из массива 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
}
}
}