2014-12-14 2 views
1

Я получаю эту строку на моем контроллере:Анализировать строку объект

"[{\"id\":12},{\"id\":2,\"children\":[{\"id\":3},{\"id\":4}]}]" 

Я хочу, чтобы разобрать это, и создать один Еогеасп внутри другого Еогеаспа, чтобы получить родитель и ребенок.

Я пытался это:

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

Я получил эту ERRO:

Не может десериализации текущего массива 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

** Что сказать ошибка **? – SLaks

+0

см. Мое редактирование, я добавил ошибку – BrunoRamalho

ответ

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

Да, я только что попробовал, у меня такая же ошибка, см. Мое редактирование для ошибки – BrunoRamalho

+1

@bramalho, я думаю, проблема в том, что вы пытаетесь ввести OBJECT (single), КОЛЛЕКЦИЯ (потому что ваш JSON - это коллекция). Попробуйте мой обновленный ответ – Jauch

+0

да, работает peerfectlly – BrunoRamalho

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 
      } 
     } 
    } 
Смежные вопросы