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



我有一个关于 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>()

您需要

创建两个类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;}
}

最新更新