Как десериализовать только часть файла Json в класс c # - PullRequest
1 голос
/ 11 ноября 2019

У меня есть файл Json, который содержит некоторую информацию, которая мне нужна в другом месте моего кода, но большая часть информации не имеет отношения к делу.

В данный момент я просто поместил его в динамический объект, чтобы я мог проверить, что онвсе работало:

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

Как получить необходимую информацию из файла Json и сохранить ее где-нибудь как переменные.

Все остальные учебники, где она хранится в классе, используютвесь файл 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": ""
      }
    ]
  }
}

1 Ответ

1 голос
/ 11 ноября 2019

Вы можете создать структуру данных, которая имеет только соответствующие свойства. Например,

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...