我有一个关于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; }
}
到目前为止,我还没有找到办法让这项工作成功。显然我已经尝试创建一个名为“Attributes”的单独类来存储这些属性,然后将播放器保留为根对象,这当然有效,但我想知道是否有任何方法可以使这项工作无需进行多个类在使用JsonConvert.DeserializeObject<IEnumerable<Player>>(json);
由于
编辑:忘记提及它并不像将json字符串解析为json对象那么容易,而是反序列化json["data"][0]["attributes"]
,因为我需要在类中存储其他属性,例如“type”和“ id“在这个例子中。
答案 0 :(得分:0)
您需要创建两个类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;}
}
答案 1 :(得分:0)
下面应该为你做的伎俩。它使用ToObject
上的JToken
方法。
JObject.Parse(json)["data"][0]["attributes"].ToObject<Player>()
或
JObject.Parse(json).SelectToken("$.data[0].attributes").ToObject<Player>()