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。
我目前正在做一个项目,我向 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。