C# 非泛型根对象的JSON.Net反序列化
我目前正在做一个项目,我向Riot Games API发出请求,解析JSON,并用它做一些事情。我让请求生效,我知道我得到的是有效的JSON。我的问题是使用JSON.Net来反序列化JSON JSON具有以下结构:C# 非泛型根对象的JSON.Net反序列化,c#,json,json.net,riot-games-api,C#,Json,Json.net,Riot Games Api,我目前正在做一个项目,我向Riot Games API发出请求,解析JSON,并用它做一些事情。我让请求生效,我知道我得到的是有效的JSON。我的问题是使用JSON.Net来反序列化JSON JSON具有以下结构: { "xarcies": { "id": 31933985, "name": "Farces", "profileIconId": 588, "revisionDate": 1450249383000,
{
"xarcies": {
"id": 31933985,
"name": "Farces",
"profileIconId": 588,
"revisionDate": 1450249383000,
"summonerLevel": 30
}
}
我想把这些数据加载到下面的类中
[JsonObject(MemberSerialization.OptIn)]
class Summoner
{
[JsonProperty("id")]
public long id {get;set;}
[JsonProperty("name")]
public string name { get; set; }
[JsonProperty("profileIconId")]
public int profileIconId { get; set; }
[JsonProperty("revisionDate")]
public long revisionDate { get; set; }
[JsonProperty("summonerLevel")]
public long summonerLevel { get; set; }
}
我遇到的问题是,因为我得到了一个包含我需要的信息的“xarcies”对象,所以我不确定如何设计一个可以接受JSON数据的类。我看到过一些使用RootObject类获取对象的示例,该类有一个子类,所有对都放入其中,但我似乎无法让它工作。每次我运行它时,对象的属性都是空的。我只是用来创建以下类(它的类型看起来与您的有点不同):
公共类用户数据
{
公共int id{get;set;}
公共字符串名称{get;set;}
public int profileIconId{get;set;}
公共长修订日期{get;set;}
公共int召唤级别{get;set;}
}
公共类根对象
{
公钥值对值{get;set;}
}
您可以将JSON反序列化为字典
:
var root=JsonConvert.DeserializeObject(jsonString);
字典将由用户名键入,在本例中为
“xarcies”
。请参阅。好的。这将有助于类本身的结构。也不知道json2csharp。漂亮的工具。然而,我仍然有一个挥之不去的问题。这适用于此特定对象。但是,xarcies是一个用户。这意味着,根据我从API请求的用户,类结构将发生变化。有什么通用的方法吗?@Jatrammel你能试试上面的方法吗?就试试吧value.Key
和value.value
都返回为null
@dbc抱歉,请阅读另一个问题。。。也许召唤师
工作得更好(不是更好-它工作得更好)。但是我不能从你那里复制粘贴,不是吗?…Json.NET不会将单个键/值对序列化为字典,它是这样序列化的:{“value”:{“key”:“xarcies”,“value”:{“id”:31933985,“name”:“Farces”,“profileIconId”:588,“revisionDate”:1450249383000,“召唤级别”:30}}
是“xarcies”
一个标准属性名称,或者是一个特定召唤者的名字?闹剧是一个特定召唤者的名字。每次api返回JSON时,它都会这样说。你也是向我指出这个方向的Redditor吗?不管怎样,这绝对是我想要的答案。
public class UserData
{
public int id { get; set; }
public string name { get; set; }
public int profileIconId { get; set; }
public long revisionDate { get; set; }
public int summonerLevel { get; set; }
}
public class RootObject
{
public KeyValuePair<string, UserData> value { get; set; }
}
var root = JsonConvert.DeserializeObject<Dictionary<string, Summoner>>(jsonString);