在Unity和c#中使用基本JSON存在问题

本文关键字:JSON 存在 问题 Unity | 更新日期: 2023-09-27 18:07:30

我在Unity中使用JSON文件制作游戏库存物品列表。这很好,但现在我被一件看似简单的事情困住了。

我只是想改变一堆布尔/整数通过一个JSON文件加载它,所以玩家托管自己的服务器可以自定义它到自己的风格。

这是我以前的方法,它工作得很好。…只是我取出来的重复代码。

     void SetInitialReferences()
            {
                itemData = JsonMapper.ToObject(File.ReadAllText(Application.dataPath + "/StreamingAssets/Items.json"));
                ConstructItemDatabase();
            }
            public Item FetchItemByID(int id)
            {
                for( int i = 0; i < dataBase.Count; i++  )          
                    if (dataBase[i].ItemID == id)
                        return dataBase[i];           
                return null;
            }
    void ConstructItemDatabase()
            {
                for (int i = 0; i < itemData.Count; i++)
                {
                    dataBase.Add(new Item((int)itemData[i]["id"], ...........));
                }
            }
  public class Item
    {
        public int ItemID { get; set; }
..........
 public Item (int itemId...............)
        {
            this.ItemID = itemId;
............
}

现在是我的新代码,我不想把它放在列表中,因为我不需要多次访问它。

 void Start()
        {
            serverData = JsonMapper.ToObject(File.ReadAllText(Application.dataPath + "/StreamingAssets/ServerData.json"));
            ChangeServerOptions();
        }

        public void ChangeServerOptions()
        {
            this.treesRespawn = (bool)serverData["TreesRespawn"];
            this.rocksRespawn = (bool)serverData["RocksRespawn"];
.
.
.
.
.
}

最后这是我的错误,我认为这是因为我使用了JsonMapper。是啊,但我不知道还有什么办法。

InvalidOperationException: Instance of JsonData is not a dictionary
LitJson.JsonData.EnsureDictionary ()
LitJson.JsonData.get_Item (System.String prop_name)
Overdose.GameManager_ServerOptions.ChangeServerOptions () (at Assets/Scripts/MasterScripts/GameManager_ServerOptions.cs:61)
Overdose.GameManager_ServerOptions.Start () (at Assets/Scripts/MasterScripts/GameManager_ServerOptions.cs:53)

我只需要允许那些不是程序员的人改变他们的服务器设置。

这是旧的JSON:

{
    "id": 0,
    "title": "G36c",
    "description": "Primary Weapon. Automatic Rifle, uses 5.56 ammuntion.",
    "value": 50000,
  "maxQuantity": 1,
  "maxSpecialQuantity" :  1,
    "health": 100,
  "type": "Weapon",
  "secondType": "",
  "specialType": "PrimaryWeapon",
  "attachments": 6,
  "smuggle": false,
  "ammoType": "FiveAmmo",
  "battery": false,
  "fuel" :  false,
      "stackable": false,
    "slug": "g36c"
  },
新:

   {
        //Resources
        "TreesRespawn": true,
        "RocksRespawn": true,
        "MiscResourceRespawn": true,
.
.
.
.
.
.

在Unity和c#中使用基本JSON存在问题

我明白了。

syncSystemDate = (bool)serverData[0]["SyncSystemData"];

我没有意识到它被认为是一个数组,所以我必须添加[0]。这个问题困扰了我好几个小时,它看起来很简单,它是....