繁体   English   中英

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

[英]Deserialize JSON array into C# Structure with RestSharp

我使用RestSharp和IRestResponse<T> response = client.Execute<T>(request)动态地将不同的JSON结构转换为各种C#结构。 但是,一个特定的JSON结果给了我麻烦,它以括号开始和结束......

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

[
  {
    "first": "Adam",
    "last": "Buzzo"
  },
  {
    "first": "Jeffrey",
    "last": "Mosier"
  }
]

我创建了这个类结构:

public class Person
{
    public string first { get; set; }
    public string last { get; set; }
}
public class Persons
{
    public List<Person> person { get; set; }
}

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

IRestResponse<T> response = client.Execute<T>(request);
return response;

问题是,当T是人时,我在客户端上出现此错误。执行行:

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

我也试过Json.Net并得到了这个错误:

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

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

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

正如评论中所提到的,你的json拥有一系列人。 因此,反序列化的目标结构应与之匹配。 使用:

var response = client.Execute<List<Person>>(request);

或者如果您更喜欢Persons类,请将其更改为

public class Persons : List<Person>
{
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM