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

JSON.Net Deserialization of non-generic Root Objects

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

JSON的结构如下:

{
  "xarcies": {
        "id": 31933985,
        "name": "Farces",
        "profileIconId": 588,
        "revisionDate": 1450249383000,
        "summonerLevel": 30
    }
}

我想把这个数据加载到下面class

[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" 对象,所以我不确定如何设计一个 class接受 JSON 数据。我见过一些使用 RootObject class 来获取对象的示例,并且 class 有一个 subclass 所有对都放入其中,但我似乎无法理解它工作。每次我 运行 它的对象属性最终都是 NULL。

我刚刚使用 json2csharp 创建了以下 class(它的类型看起来与你的有点不同):

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; }
}

您可以将 JSON 反序列化为 Dictionary<string, Summoner>:

var root = JsonConvert.DeserializeObject<Dictionary<string, Summoner>>(jsonString);

字典将以用户名作为关键字,在本例中为 "xarcies"。参见 Deserialize a Dictionary