簡體   English   中英

如何僅將 Json 文件的一部分反序列化為 class c#

[英]How to only deserialize part of a Json file into a class c#

我有一個 Json 文件,其中包含我在代碼中其他地方需要的一些信息,但很多信息是無關緊要的。

目前,我只是將它放入動態 object 中,這樣我就可以檢查它是否一切正常:

var data = JsonConvert.DeserializeObject<dynamic>(response.Content);

我如何從 Json 文件中獲取我需要的信息並將它們作為變量存儲在某處。

存儲在 class 中的所有其他教程都使用整個 Json 文件,並且在我的情況下看起來沒有用。

這是 Json,我只需要文件末尾的 Stats 部分來了解我在做什么

{
  "data": {
    "id": "",
    "type": "player",
    "children": [
      {
        "id": "legend_8",
        "type": "legend",
        "metadata": {
          "legend_name": "Pathfinder",
          "icon": "https://trackercdn.com/cdn/apex.tracker.gg/legends/pathfinder-tile.png",
          "bgimage": "https://trackercdn.com/cdn/apex.tracker.gg/legends/pathfinder-concept-bg-small.jpg",
          "is_active": true
        },
        "stats": [
          {
            "metadata": {
              "key": "Kills",
              "name": "Kills",
              "categoryKey": "combat",
              "categoryName": "Combat",
              "isReversed": false
            },
            "value": 377.0,
            "percentile": 21.0,
            "displayValue": "377",
            "displayRank": ""
          },
          {
            "metadata": {
              "key": "Finishers",
              "name": "Finishers",
              "categoryKey": "game",
              "categoryName": "Game",
              "isReversed": false
            },
            "value": 39.0,
            "percentile": 0.2,
            "rank": 886,
            "displayValue": "39",
            "displayRank": "886"
          }
        ]
      },
      {
        "id": "legend_5",
        "type": "legend",
        "metadata": {
          "legend_name": "Bloodhound",
          "icon": "https://trackercdn.com/cdn/apex.tracker.gg/legends/bloodhound-tile.png",
          "bgimage": "https://trackercdn.com/cdn/apex.tracker.gg/legends/bloodhound-concept-bg-small.jpg",
          "is_active": false
        },
        "stats": [
          {
            "metadata": {
              "key": "Kills",
              "name": "Kills",
              "categoryKey": "combat",
              "categoryName": "Combat",
              "isReversed": false
            },
            "value": 235.0,
            "percentile": 16.0,
            "displayValue": "235",
            "displayRank": ""
          }
        ]
      }
    ],
    "metadata": {
      "statsCategoryOrder": [
        "combat",
        "game",
        "weapons"
      ],
      "platformId": 2,
      "platformUserHandle": "",
      "accountId": "",
      "cacheExpireDate": "11/10/2019 10:48:14 PM",
      "level": 49,
      "avatarUrl": "https://avatar-cdn.tracker.gg/api/avatar/2/",
      "countryCode": null,
      "collections": 36,
      "activeLegend": 8
    },
    "stats": [
      {
        "metadata": {
          "key": "Level",
          "name": "Level",
          "categoryKey": "combat",
          "categoryName": "Combat",
          "isReversed": false
        },
        "value": 49.0,
        "percentile": 46.0,
        "displayValue": "49",
        "displayRank": ""
      },
      {
        "metadata": {
          "key": "Kills",
          "name": "Kills",
          "categoryKey": "combat",
          "categoryName": "Combat",
          "isReversed": false
        },
        "value": 612.0,
        "percentile": 20.0,
        "displayValue": "612",
        "displayRank": ""
      },
      {
        "metadata": {
          "key": "Finishers",
          "name": "Finishers",
          "categoryKey": "game",
          "categoryName": "Game",
          "isReversed": false
        },
        "value": 39.0,
        "percentile": 0.5,
        "displayValue": "39",
        "displayRank": ""
      },
      {
        "metadata": {
          "key": "RankScore",
          "name": "Rank Score",
          "categoryKey": "game",
          "categoryName": "Game",
          "isReversed": false
        },
        "value": 64.0,
        "percentile": 21.0,
        "displayValue": "64",
        "displayRank": ""
      }
    ]
  }
}

您可以創建一個只有相關屬性的數據結構。 例如,

public class StatMetaData
{
    public string key { get; set; }
    public string name { get; set; }
    public string categoryKey { get; set; }
    public string categoryName { get; set; }
    public bool isReversed { get; set; }
}

public class Stat
{
    public StatMetaData metadata { get; set; }
    public double value { get; set; }
    public double percentile { get; set; }
    public string displayValue { get; set; }
    public string displayRank { get; set; }
}

public class Data
{
    public List<Stat> stats { get; set; }
}

public class RootObject
{
    public Data data { get; set; }

}

現在您可以按以下方式反序列化 json 以檢索統計信息部分

var result = JsonConvert.DeserializeObject<RootObject>(json).data.stats;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM