在Unity和C#中使用基本JSON时遇到问题

时间:2016-09-18 04:00:04

标签: c# json unity3d

我正在使用JSON文件为Unity中的游戏制作我的广告资源列表。这很好,花花公子,但现在我陷入了一个看似简单的事情。

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

这是我的旧方法,运作良好。 .....只是我拿出的重复代码。

await

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

     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;
............
}

最后这是我的错误,我认为是因为我正在使用JsonMapper.ToObject,但我不知道其他任何方式。

 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"];
.
.
.
.
.
}

我只需要允许非编码人员更改服务器中的设置。

这是旧的JSON:

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)

和新:

{
    "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"
  },

1 个答案:

答案 0 :(得分:0)

我明白了。

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

我没有意识到它被认为是一个数组,所以我不得不添加[0]。 这让我困扰了好几个小时,而且看起来很简单,它就是.......