在不创建多个类的情况下反序列化json

时间:2018-04-06 16:38:08

标签: c# json json.net

我有一个关于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“在这个例子中。

2 个答案:

答案 0 :(得分:0)

您需要创建两个类dataattributes

班级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>()