使用RestSharp反序列化列表时获取空值

时间:2016-12-29 17:22:12

标签: c# restsharp

我是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两者都为空,这就是我的问题。我不知道该如何调整以使其正确。

1 个答案:

答案 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