2016-11-25 78 views
1

我試圖從UnityEngine.JsonUtility反序列化我的json項目從一個文件。它工作正常,但我的枚舉類型沒有得到適當的轉換。我嘗試使用EnumMember屬性,但仍然沒有運氣。
與枚舉類型的JSON反序列化

我該如何解決這個問題?

注意

我使用this解決方案來讀取多個文件並將它們存儲在陣列。

[Serializable] 
public class EquipementItem 
{ 
    public enum ItemTypes 
    { 
     None, 
     Armor, 
     Weapon 
    } 

    public enum SlotTypes 
    { 
     Head, 
     Shoulders, 
     Chest, 
     Bracers, 
     Gloves, 
     Waist, 
     Legs, 
     Boots, 
     Weapon 
    } 

    public int ID; 
    public string Name; 

    public ItemTypes ItemType; 
    public SlotTypes SlotType; 
} 

而且JSON文件

{ 
"Items": [ 
{ 
    "ID": "1", 
    "Name": "Basic Sword", 
    "ItemType": "Weapon", 
    "SlotType": "Weapon" 
}, 
{ 
    "ID": "2", 
    "Name": "Advanced Sword", 
    "ItemType": "Weapon", 
    "SlotType": "Weapon" 
}, 
{ 
    "ID": "3", 
    "Name": "Leather Chest", 
    "ItemType": "Armor", 
    "SlotType": "Chest" 
} 
]} 

這是我加載JSON文件中的類:

public class Items : MonoBehaviour 
{ 
    public static EquipementItem[] EquipableItems; 

    private void Awake() 
    { 
     string jsonFile = File.ReadAllText(Application.dataPath + "/Scripts/Databases/EquipableItemsDB.json"); 
     EquipableItems = JsonHelper.FromJson<EquipementItem>(jsonFile); 
    } 
} 
+0

枚舉的都是整數。你有沒有嘗試過將JSON中的「ItemType」設置爲1,將「SlotType」設置爲2? – ColinM

+0

輸入json和模型在那裏,但我看不到**你的代碼** –

+0

你可以發佈這個答案嗎?有效 ! – mashinkata

回答

0

你的JSON屬性都是字符串,所以他們只能將反序列化一個String,而Enum值實際上是整數。

你應該能夠將您的JSON更改爲以下,它會下反序列化就好

{ 
    "Items": [ 
    { 
     "ID": "1", 
     "Name": "Basic Sword", 
     "ItemType": 2, 
     "SlotType": 8 
    }, 
    { 
     "ID": "2", 
     "Name": "Advanced Sword", 
     "ItemType": 2, 
     "SlotType": 8 
    }, 
    { 
     "ID": "3", 
     "Name": "Leather Chest", 
     "ItemType": 1, 
     "SlotType": 2 
    } 
]} 
+0

你可以提供一個例子,說明如何使用'Enum.Parse'來做同樣的事情嗎? – mashinkata

+0

我已經更新了我的答案,如果您使用Newtonsoft.Json來反序列化枚舉,實際上有一種更簡單的方法 – ColinM

+0

newtonsoft.Json能否與Unity的JasonUtility完美結合? – mashinkata