首页 > 解决方案 > 如何将类似对象的json对象反序列化为c#列表

问题描述

我有这样的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 对象反序列化。

标签: c#jsonjson.netjson-deserialization

解决方案


您可以使用 反序列化 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}");
}

推荐阅读