Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从API C反序列化JSON#_C#_Json_Serialization_Riot Games Api - Fatal编程技术网

C# 从API C反序列化JSON#

C# 从API C反序列化JSON#,c#,json,serialization,riot-games-api,C#,Json,Serialization,Riot Games Api,我在反序列化C#中RIOT API的JSON响应时遇到了一些问题。我想得到“Champion”列表,API返回如下流: { "type":"champion", "version":"6.1.1", "data":{ "Thresh":{ "id":412, "key":"Thresh", "name":"Thresh", "title":"the Chain Warden"

我在反序列化C#中RIOT API的JSON响应时遇到了一些问题。我想得到“Champion”列表,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、键、名称和标题),因此我创建了一个champion类:

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,但没有找到帮助我的示例。

如果您想使用NewtonSoft:

JsonConvert.DeserializeObject<RootObject>(string json);
JsonConvert.DeserializeObject(字符串json);

Json.NET文档:

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

public class RootChampionDTO
{
    public string Type { get; set; }
    public string Version { get; set; }
    public Dictionary<string, Champion> Data { get; set; }
}
公共类RootChampionDTO
{
公共字符串类型{get;set;}
公共字符串版本{get;set;}
公共字典数据{get;set;}
}
然后使用Newtsonsoft的Json.NET,您将使用以下命令进行反序列化:

JsonConvert.DeserializeObject<RootChampionDTO>(string json);
JsonConvert.DeserializeObject(字符串json);
考虑以下类别:

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; }
}
公共类响应模型
{
公共字符串类型{get;set;}
公共字符串版本{get;set;}
公共字典数据{get;set;}
}
公开课冠军
{
公共int Id{get;set;}
公共字符串密钥{get;set;}
公共字符串名称{get;set;}
公共字符串标题{get;set;}
}
使用Newtonsoft.Json nuget包反序列化Json后:

 using Newtonsoft.Json;

 var result = JsonConvert.DeserializeObject<ResponseModel>(json);
使用Newtonsoft.Json;
var result=JsonConvert.DeserializeObject(json);

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

如果您对类型或版本属性不感兴趣,只需使用Json.NET进行注释即可,您可以将它们从
RootChampionDTO
类中省略,它仍然会进行反序列化,不会出现任何问题。