繁体   English   中英

Restsharp和反序列化到字典

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM