使用 RestSharp 将 JSON 数组反序列化为 C# 结构

sta*_*ire 3 c# json restsharp deserialization json-deserialization

我使用 RestSharp 和IRestResponse<T> response = client.Execute<T>(request). 但是,一个特定的 JSON 结果给我带来了麻烦,它以方括号开头和结尾......

我的 JSON 以“[”和“]”字符开头和结尾:

[
  {
    "first": "Adam",
    "last": "Buzzo"
  },
  {
    "first": "Jeffrey",
    "last": "Mosier"
  }
]
Run Code Online (Sandbox Code Playgroud)

我创建了这个类结构:

public class Person
{
    public string first { get; set; }
    public string last { get; set; }
}
public class Persons
{
    public List<Person> person { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我在方法中使用 RestSharp 动态反序列化为我的Persons类型 T...

IRestResponse<T> response = client.Execute<T>(request);
return response;
Run Code Online (Sandbox Code Playgroud)

问题是,当 T 是Persons时,我在客户端上收到此错误。执行行:

无法将“RestSharp.JsonArray”类型的对象转换为“System.Collections.Generic.IDictionary`2[System.String,System.Object]”类型。

我也尝试使用 Json.Net 并收到此错误:

无法将当前 JSON 数组(例如 [1,2,3])反序列化为“Persons”类型,因为该类型需要 JSON 对象(例如 {\"name\":\"value\"})才能正确反序列化。

鉴于最初的“[”字符,我尝试反序列化为Person列表。这停止了​​错误消息,我有正确数量的“人”记录,但它们都是空的。(我确认名称的大小写是相同的。)当目标服务器中的数组始终只有一个元素时,我也不想使用 List 集合,因此绑定到“Persons”比“List”更有意义。

将此 JSON 反序列化为Person并且仍在我的动态方法范围内的正确方法是什么IRestResponse<T> response = client.Execute<T>(request)

Sze*_*eki 5

正如评论中提到的,您的 json 包含一个人员数组。因此,要反序列化的目标结构应该与之匹配。要么使用:

var response = client.Execute<List<Person>>(request);
Run Code Online (Sandbox Code Playgroud)

或者如果您更喜欢该Persons课程,请将其更改为

public class Persons : List<Person>
{
}
Run Code Online (Sandbox Code Playgroud)