使用 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
我是 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