1

我在 C# 中反序列化来自 RIOT API 的 JSON 响应时遇到了一些问题。我想获取“冠军”列表,API 返回这样的流:

{  
   "type":"champion",
   "version":"6.1.1",
   "data":{  
      "Thresh":{  
         "id":412,
         "key":"Thresh",
         "name":"Thresh",
         "title":"the Chain Warden"
      },
      "Aatrox":{  
         "id":266,
         "key":"Aatrox",
         "name":"Aatrox",
         "title":"the Darkin Blade"
      },...
    }
}

所有数据都具有相同的属性(id、key、name 和 title),所以我创建了一个冠军类:

public class Champion
    {
        public int id { get; set; }
        public string key { get; set; }
        public string name { get; set; }
        public string title { get; set; }
    }

我需要你的帮助,因为我不知道如何反序列化这些数据...我需要创建一个具有类型、版本和数据属性的 Root 类(数据是冠军列表)?我观察了使用过的 NewtonSoft Json,但我没有找到帮助我的例子。

4

3 回答 3

2

您可以使用以下根对象(更准确地说是数据传输对象)从 API 中检索冠军。这将返回所有冠军,而无需为每个冠军创建一个类。

public class RootChampionDTO
{
    public string Type { get; set; }
    public string Version { get; set; }
    public Dictionary<string, Champion> Data { get; set; }
}

然后使用 Newtsonsoft 的 Json.NET,您将使用以下命令进行反序列化:

JsonConvert.DeserializeObject<RootChampionDTO>(string json);
于 2016-01-21T10:42:13.567 回答
0

考虑这样的类:

public class ResponseModel
{
    public string Type { get; set; }

    public string Version { get; set; }

    public Dictionary<string, Champion> Data { get; set; }
}

public class Champion
{
    public int Id { get; set; }

    public string Key { get; set; }

    public string Name { get; set; }

    public string Title { get; set; }
}

在使用 Newtonsoft.Json nuget 包反序列化您的 json 之后:

 using Newtonsoft.Json;

 var result = JsonConvert.DeserializeObject<ResponseModel>(json);

请注意,Newtonsoft.Json 默认设置允许您正确地将 camelCase 属性从 json 解析为 C# 类中的 PascalCase 属性。

于 2016-01-21T10:49:09.470 回答
0

如果你想使用 NewtonSoft:

JsonConvert.DeserializeObject<RootObject>(string json);

Json .NET 文档: http: //www.newtonsoft.com/json/help/html/SerializingJSON.htm

于 2016-01-21T10:39:16.203 回答