我有一个关于 JSON.NET 和反序列化嵌套 JSON 的问题。
我想知道我是否可以从 API 响应中提取一些属性,而无需使用 JsonConvert.DeserializeObject 创建一个类来存储父对象。
示例 JSON:
{
"data": [
{
"type": "player",
"id": "account.59daecb0cc3144f7bf6e60c8caabf454",
"attributes": {
"createdAt": "2018-04-03T21:11:16Z",
"name": "UppyMeister",
"patchVersion": "",
}
}]
}
示例类:
public class Player
{
[JsonProperty]
public string Name { get; set; }
[JsonProperty]
public DateTime CreatedAt { get; set; }
[JsonProperty]
public string PatchVersion { get; set; }
}
到目前为止,我还没有找到使这项工作的方法。显然,我已经尝试创建一个名为"属性"的单独类来存储这些属性,然后将 player 保留为根对象,这当然有效,但我想知道是否有任何方法可以使这项工作,而不必创建多个类来表示所有对象,同时仍然使用 JsonConvert.DeserializeObject<IEnumerable<Player>>(json);
谢谢
编辑:忘了提到,这并不像将 json 字符串解析为 json 对象然后反序列化json["data"][0]["attributes"]
那么容易,因为我需要在类中存储其他属性,例如此示例中的"类型"和"id"。
下面应该可以为您解决问题。它在JToken
上使用ToObject
方法。
JObject.Parse(json)["data"][0]["attributes"].ToObject<Player>()
或
JObject.Parse(json).SelectToken("$.data[0].attributes").ToObject<Player>()
创建两个类data
和attributes
类data
public class data{
public string type {get; set;}
public string id {get; set;}
public player_attributes attributes {get; set;}
}
public class player_attributes{
public string createdAt {get; set;}
public string name {get; set;}
public string patchVersion {get; ;set;}
}