如何使用JsonConvert反序列化此JSON?

时间:2016-05-26 01:39:54

标签: c# json json.net

我有这个JSON,我无法弄清楚如何将它转换为C#中的对象列表。

这是JSON:

{
  "2": {
    "sell_average": 239,
    "buy_average": 238,
    "overall_average": 240,
    "id": 2
  },
  "6": {
    "sell_average": 184434,
    "buy_average": 182151,
    "overall_average": 189000,
    "id": 6
  },
  "8": {
    "sell_average": 11201,
    "buy_average": 1723,
    "overall_average": 180,
    "id": 8
  }
}

我尝试使用的代码:

public class ItemSummaryModel
{
    public string Id { get; set; }
    public ItemSummary ItemSummary { get; set; }
}

public class ItemSummary
{
    public int Sell_Average { get; set; }
    public int Buy_Average { get; set; }
    public int Overall_Average { get; set; }
    public int Id { get; set; }
}

List<ItemSummaryModel> models =
    JsonConvert.DeserializeObject<List<ItemSummaryModel>>(jsonSummary);

无济于事。如何使用Newtonsoft的JSON库(Json.Net)将此JSON反序列化为这些对象的列表?

2 个答案:

答案 0 :(得分:2)

您可以使用

var dict = JsonConvert.DeserializeObject<Dictionary<int, ItemSummary>>(json);
var items = dict.Values.ToList();  //if you want a List<ItemSummary>;

答案 1 :(得分:0)

public class ItemSummaryModel
{
    [JsonProperty(PropertyName = "2")]
    public ItemSummary Two { get; set; }
    [JsonProperty(PropertyName = "6")]
    public ItemSummary Six { get; set; }
    [JsonProperty(PropertyName = "8")]
    public ItemSummary Eight { get; set; }
}

var result = JsonConvert.DeserializeObject<ItemSummaryModel>(json);

这在技术上会让你成为一个复杂的对象,但我不太喜欢它。拥有属性名称的数字将是一个问题。这对于单个复杂对象来说是json也会很棘手。如果它是一个列表,你可以开始编写自己的ContractResolver来处理将数字属性名称映射到id字段,将实际对象映射到你想要的任何属性。