首页 > 解决方案 > 将数据文件分类为给定的类别

问题描述

我目前正在为我托管的游戏服务器设置插件,并且我有一大堆项目,它们的“类别”在 1 和 11 之间,如下面的小片段所示。我之所以这么问,是因为我需要将 200 多个项目分类为不同的类别。

    "ammo.rifle.hv_0": {
      "shortname": "ammo.rifle.hv",
      "customIcon": null,
      "amount": 64,
      "skinId": 0,
      "isBp": false,
      "category": 9,
      "displayName": "HV 5.56 Rifle Ammo",
      "cost": 10000,
      "cooldown": 0
    },
    "radiationresisttea.pure_0": {
      "shortname": "radiationresisttea.pure",
      "customIcon": null,
      "amount": 1,
      "skinId": 0,
      "isBp": false,
      "category": 8,
      "displayName": "Pure Anti-Rad Tea",
      "cost": 10000,
      "cooldown": 0
    },
    "healingtea.pure_0": {
      "shortname": "healingtea.pure",
      "customIcon": null,
      "amount": 1,
      "skinId": 0,
      "isBp": false,
      "category": 8,
      "displayName": "Pure Healing Tea",
      "cost": 10000,
      "cooldown": 0
    },
    "ammo.rifle_0": {
      "shortname": "ammo.rifle",
      "customIcon": null,
      "amount": 64,
      "skinId": 0,
      "isBp": false,
      "category": 9,
      "displayName": "5.56 Rifle Ammo",
      "cost": 10000,
      "cooldown": 0
    },
    "blueberries_0": {
      "shortname": "blueberries",
      "customIcon": null,
      "amount": 1,
      "skinId": 0,
      "isBp": false,
      "category": 8,
      "displayName": "Blueberries",
      "cost": 10000,
      "cooldown": 0
    }
}

从这里有一种方法可以索引它们,它会选择所有具有特定“类别”的索引。

例如,如果我想要所有的,"category": 9它将显示以下内容

    "ammo.rifle_0": {
      "shortname": "ammo.rifle",
      "customIcon": null,
      "amount": 64,
      "skinId": 0,
      "isBp": false,
      "category": 9,
      "displayName": "5.56 Rifle Ammo",
      "cost": 10000,
      "cooldown": 0
    },
    "ammo.rifle.hv_0": {
      "shortname": "ammo.rifle.hv",
      "customIcon": null,
      "amount": 64,
      "skinId": 0,
      "isBp": false,
      "category": 9,
      "displayName": "HV 5.56 Rifle Ammo",
      "cost": 10000,
      "cooldown": 0
    }

请提前谢谢你

标签: c#jsonsorting

解决方案


好吧,您可以尝试这种方法:

定义与您的对象匹配的相应类:

public class SomeObject{
  public string ShortName {get; set;}
  /// ... add all other properties.
}

将传入的数据从 json 转换为 c# 对象:

在这里您可以选择使用 Newtonsoft 软件包。但是还有许多其他库可以帮助您解决这个问题。但这是您可以使用 Newtonsoft 执行的操作

var myData = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string,SomeObject> >(jsonString);

Dictionary<string, SomeObject>这将根据提供的数据创建一个新的。


您可以myData使用 LINQ 查询数据,即让我们获取其中的项目category == 9

result = myData.Where(p => p.Category == 9).ToDictionary<string,SomeObject>(); 

这将得到一个新字典resultkeysSomeObject.caterory等于9


一些可以帮助您的参考资料包括:

  1. 将 JSON 转换为 C#
  2. 使用 LINQ 查询字典

推荐阅读