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

Getting null values when deserializing a list using 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 两者都是空的,这是我的问题。我不确定要调整什么才能使其正确。

您得到的是空值,因为您正在反序列化的 JSON 与您正在反序列化的 class 结构不匹配。您告诉 RestSharp 将 content 数组反序列化为 List<EmailID>,但 JSON 实际上表示 包含 [=15= 的对象列表] 对象。所以你需要另一个 class:

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