[英]Restsharp and deserialization to a dictionary
我有一个有趣的问题,因为相同的URI调用返回的JSON
基于用户的ID可能会略有不同。 我不知道差异的所有组合,因为事情会随着时间而变化。 例如,对同一URL的三个不同请求可以返回这三个不同的JSON表示形式。
{ "success":true, "total":1, "list":[{
"uid":"24",
"firstname":"Richard",
"question1":"Y"}
]}
{ "success":true, "total":1, "list":[{
"uid":"25",
"firstname":"Fred",
"question2":"Yes"}
]}
{ "success":true, "total":1, "list":[{
"uid":"26",
"firstname":"Bob",
"surname":"Wilde",
"question3":"Cat"}
]}
请注意,第一个电话包含Question1
,第二个电话包含Question2
,第三个电话包含surname and Question3
。
反序列化的代码如下所示:
var result = client.Execute<ResultHeader<Customer>>(request);
public class ResultHeader<T>
{
public bool Success { get; set; }
public int Total { get; set; }
public List<T> List { get; set; }
}
public class Customer
{
public string Firstname { get; set; } //This is always returned in the JSON
//I am trying to get this...
public Dictionary<string, string> RemainingItems { get; set; }
}
我所试图做的是要么返回的字典集合ALL
包含在事情list
是不常见的,并没有被反序列化或不包含万物的字典list
。 一些假设是,如果需要,列表中的所有值都可以视为字符串。
使用RESTSharp
是否可能? 我不想在编译时使用动态变量,因为我不知道所有可能性。 基本上,一旦有了字典,我就可以在运行时循环并映射到需要的位置。
我要做一个中间步骤:
var resultTmp = client.Execute<ResultHeader<Dictionary<string,string>>>(request);
var finalResult = AdaptResult(resultTmp);
可以按以下方式实现AdaptResult
:
static ResultHeader<Customer> AdaptResult(
ResultHeader<Dictionary<string, string>> tmp)
{
var res = new ResultHeader<Customer>();
res.Success = tmp.Success;
res.Total = tmp.Total;
res.List = new List<Customer>();
foreach (var el in tmp.List)
{
var cust = new Customer();
cust.Firstname = el["Firstname"];
cust.RemainingItems =
el.Where(x => x.Key != "Firstname")
.ToDictionary(x => x.Key, x => x.Value);
res.List.Add(cust);
}
return res;
}
当然,适应方法将包含您的检查逻辑(例如,如果所有问题都在词典中等,则失败)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.