C# 非泛型根对象的JSON.Net反序列化

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,

我目前正在做一个项目,我向Riot Games API发出请求,解析JSON,并用它做一些事情。我让请求生效,我知道我得到的是有效的JSON。我的问题是使用JSON.Net来反序列化JSON

JSON具有以下结构:

{
  "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);