[英]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.