我是C#和RestSharp的新手。
我正在编写一个小程序来通过REST检索记录列表。我已经能够检索一条记录。现在我需要获取一个记录列表,这里我有一个问题。
我使用SoapUI获得的响应如下所示:
{
"@count": 2,
"@start": 1,
"@totalcount": 2,
"Messages": [],
"ResourceName": "email",
"ReturnCode": 0,
"content": [
{"email": {"evsysseq": "0000000000000262"}},
{"email": {"evsysseq": "0000000000000263"}}
]
}
我的代码如下所示:
class EmailID
{
public string Evsysseq { get; set; }
}
var client = new RestClient("xxxxx");
client.Authenticator = new HttpBasicAuthenticator("xxx", "xxx");
string queryParm = HttpUtility.UrlEncode("evsysseq>\"0000000000000261\"");
var request = new RestRequest("xxxx?query="+ queryParm, Method.GET);
request.RootElement = "content";
var queryResult = client.Execute<List<EmailID>>(request).Data;
运行它不会导致错误,我可以在queryResult
对象上看到它确实包含两个记录。但是,Evsysseq
两者都为空,这就是我的问题。我不知道该如何调整以使其正确。
答案 0 :(得分:1)
您将获取空值,因为您要反序列化的JSON与要反序列化的类结构不匹配。您告诉RestSharp将content
数组反序列化为List<EmailID>
,但JSON实际上表示包含 EmailID
个对象的对象列表。所以你需要另一堂课:
class EmailObj
{
public EmailID Email { get; set; }
}
然后像这样反序列化,你应该得到数据:
var queryResult = client.Execute<List<EmailObj>>(request).Data;
如果您愿意,可以使用LINQ获取您最初想要的List<EmailID>
:
var emailIds = queryResult.Select(eo => eo.Email).ToList();
HTH