Разбор строки для объекта

1

Я получаю эту строку на моем контроллере:

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

У меня возникли ошибки, когда я пытаюсь преобразовать строку.

Мой вопрос: как я могу заставить это работать?

И для моей струны, какой подход лучше всего подходит для моих нужд?

  • 1
    Что говорит ошибка ?
  • 0
    посмотрите мои правки, я добавил ошибку
Теги:

2 ответа

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);
  • 0
    Да, я только что попробовал, я получил ту же ошибку, см. Мои изменения для ошибки
  • 1
    @bramalho, я думаю, что проблема в том, что вы пытаетесь поместить в ОБЪЕКТ (один), КОЛЛЕКЦИЮ (потому что ваш 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
            }
        }
    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню