Как десериализовать объект json из похожих объектов в c # list <T> - PullRequest
0 голосов
/ 16 мая 2019

У меня есть ответ json, подобный этому:

{
  "val1":{
    "id":"1",
    "value":"val"
  },
  "val2":{
    "id":"2",
    "value":"otherVal"
}
}

Как я десериализирую эту полезную нагрузку в общий список SimplyObject, где SimplyObject равен

public class SimpleObject { 
   public int Id {get;set;} 
   public string Value {get;set;}
}

Когда я пытаюсь десериализовать эту полезную нагрузку в СписокSimpleObject у меня есть ошибка ниже:

Невозможно десериализовать текущий объект JSON (например, {"name": "value"}) в тип 'System.Collections.Generic.List`1 [SimpleObject]'потому что для корректной десериализации тип требует массив JSON (например, [1,2,3]).Чтобы исправить эту ошибку, либо измените JSON на массив JSON (например, [1,2,3]), либо измените десериализованный тип так, чтобы это был нормальный тип .NET (например, не примитивный тип, например, целое число, а не тип коллекции, например,массив или список), которые можно десериализовать из объекта JSON.JsonObjectAttribute также можно добавить к типу, чтобы принудительно десериализовать его из объекта JSON.

1 Ответ

3 голосов
/ 16 мая 2019

Вы можете десериализовать свой JSON, используя Dictionary, например:

var result = JsonConvert.DeserializeObject<Dictionary<string, SimpleObject>>(json);

И используйте это, например, так:

foreach (var item in result)
{
    Console.WriteLine($"Item: {item.Key} has Id of {item.Value.Id} and value of {item.Value.Value}");
}
...