mas*_*ata 3 c# enums json unity-game-engine
我正在尝试使用UnityEngine.JsonUtility
. 它工作正常,但我的枚举类型没有得到正确转换。我尝试使用该EnumMember
属性,但仍然没有运气。
我该如何解决?
笔记
我正在使用此解决方案读取多个文件并将它们存储在数组中。
[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;
}
Run Code Online (Sandbox Code Playgroud)
和 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"
}
]}
Run Code Online (Sandbox Code Playgroud)
这是我加载 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);
}
}
Run Code Online (Sandbox Code Playgroud)
您的 JSON 属性都是字符串,因此它们只能反序列化为 a 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
}
]}
Run Code Online (Sandbox Code Playgroud)
更新
在写这篇文章的时候,我已经忘记了它的StringEnumConverter
存在。如果您想在 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
}
]}
Run Code Online (Sandbox Code Playgroud)