在 C# 中反序列化复杂对象

deserialize complex object in C#

我有一个无法反序列化的 JSON 对象。它因以下错误而失败:

Newtonsoft.Json.JsonSerializationException: 'Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List1[SampleObj]' because the type requires a JSON array.

JSON:

"{\"rows\":
     [
      {\"ID\":1,
       \"Name\":\"Puz\"
      },
       
      {\"ID\":2,
        \"Name\":\"Kez\"
      }
        
    ]
}"

我尝试使用 Newtonsoft 进行以下操作:

var deserializeObject = JsonConvert.DeserializeObject<List<SampleObj>>(jsonString);

下面的尝试是使用 JavaScriptSerializer。

JavaScriptSerializer oJS = new JavaScriptSerializer();
List<SampleObj> deserializeObject = new List<ReportColumns>();
deserializeObject = oJS.Deserialize<List<ReportColumns>>(jsonString);

但是都报错

可以使用以下命令安装 Newtonsoft:

PM>Install-Package Newtonsoft.Json -Version 13.0.1

用法示例:

string json = @"{
  'Email': 'james@example.com',
  'Active': true,
  'CreatedDate': '2013-01-20T00:00:00Z',
  'Roles': [
    'User',
    'Admin'
  ]
}";

Account account = JsonConvert.DeserializeObject<Account>(json);

Console.WriteLine(account.Email);

您的反序列化 class 似乎与提供的 JSON 结构不匹配。像这样的东西应该适合你:

public class Foo
{
  public List<Bar> rows { get; set; }
}

public class Bar
{
  public int ID { get; set; }
  public string Name { get; set; }
}

Foo deserializeObject = oJS.Deserialize<Foo>(jsonString);