2016-11-25 7 views
1

Ich versuche, meine JSON-Elemente aus einer Datei mit UnityEngine.JsonUtility deserialisieren. Es funktioniert gut, aber meine Enum-Typen werden nicht richtig konvertiert. Ich habe versucht, das EnumMember Attribut zu verwenden, hatte aber immer noch kein Glück.
JSON-Deserialisierung mit Aufzählungstypen

Wie kann ich das beheben?

Hinweis

ich this Lösung bin mit mehreren Dateien und speichert sie in einem Array zu lesen.

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

Und die JSON-Datei

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

Dies ist die Klasse, wo ich die JSON-Datei laden:

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

Enum ist unterhalb ganze Zahlen deserialisieren. Hast du versucht, "ItemType" in deinem JSON auf 1 und "SlotType" auf 2 zu setzen? – ColinM

+0

Eingabe json und das Modell ist da, aber ich kann nicht sehen ** Ihren Code ** –

+0

Können Sie dies als Antwort posten? Es funktionierte ! – mashinkata

Antwort

0

Ihre JSON Eigenschaften alle Strings sind und so können sie nur zu deserialisiert werden a String, während Enum Werte tatsächlich ganze Zahlen sind.

sollten Sie in der Lage sein, Ihre JSON des folgenden zu ändern und es wird ganz gut

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

Können Sie ein Beispiel dafür geben, wie würde man dasselbe mit "Enum.Parse" machen? – mashinkata

+0

Ich habe meine Antwort aktualisiert, es gibt tatsächlich einen einfacheren Weg, wenn Sie Newtonsoft.Json verwenden, um ein Enum zu deserialisieren – ColinM

+0

Wird newtonsoft.Json gut mit Unity JasonUtility kombinieren? – mashinkata

Verwandte Themen