C# 从API C反序列化JSON#
我在反序列化C#中RIOT API的JSON响应时遇到了一些问题。我想得到“Champion”列表,API返回如下流: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"
{
"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
类中省略,它仍然会进行反序列化,不会出现任何问题。