[英]Deserialize JSON from Riot API C#
我在從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,鍵,名稱和標題),因此我創建了Champion類:
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,但我找不到幫助我的例子。
您可以使用以下根對象(更准確地說是數據傳輸對象)從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);
如果要使用NewtonSoft:
JsonConvert.DeserializeObject<RootObject>(string json);
Json .NET文檔: http : //www.newtonsoft.com/json/help/html/SerializingJSON.htm
考慮以下類:
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的默認設置允許您將json中的camelCase屬性正確地解析為C#類中的PascalCase屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.