【问题标题】:Getting null values when deserializing a list using RestSharp使用 RestSharp 反序列化列表时获取空值
【发布时间】:2016-12-30 04:38:34
【问题描述】:

我是 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 两者都为空,这是我的问题。我不确定要调整什么才能让它正确。

【问题讨论】:

    标签: c# restsharp


    【解决方案1】:

    您得到空值是因为您反序列化的 JSON 与您反序列化到的类结构不匹配。您正在告诉 RestSharp 将 content 数组反序列化为 List&lt;EmailID&gt;,但 JSON 确实表示 包含 EmailID 对象的对象列表。所以你需要另一个类:

    class EmailObj
    {
        public EmailID Email { get; set; }
    }
    

    然后像这样反序列化,你应该得到数据:

    var queryResult = client.Execute<List<EmailObj>>(request).Data;
    

    如果您愿意,您可以使用 LINQ 获取您最初想要的 List&lt;EmailID&gt;,如下所示:

    var emailIds = queryResult.Select(eo => eo.Email).ToList();
    

    HTH

    【讨论】:

    • 谢谢布赖恩。工作完美。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多