2016-09-18 17 views
0

私は、JSONファイルを使用してUnityで自分のゲームの在庫アイテムのリストを作成していました。それはうまくやっていたが、今は一見簡単なことに固執している。UnityとC#の基本的な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.ToObjectを使用しているためだと思うが、私は他の方法を知りません。

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

と新しい:ここ

は古いJSONだ

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

答えて

0

私はそれを考え出しました。

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

私はそれが配列であるとは思わなかったので、私は[0]を追加しなければなりませんでした。 これは数時間私を悩ませていました、そして、それはとても簡単なようでした....