JSON изменение значения перечислений в списке перечислений обратно на 0 - PullRequest
0 голосов
/ 29 марта 2020

У меня есть класс с несколькими переменными, которые все правильно созданы с помощью текстового файла JSON, за исключением одного списка перечислений, принадлежащих классу Effects

перечисленные ниже классы всегда имеют перечисления в По умолчанию в списке effectiveBy используется элемент 0

[System.Serializable]
public class InteractableObject : Item, IEffectReceiver
{
    protected List<Stats> stats = new List<Stats>();
    protected HashSet<Effects> currentEffects;
    public List<Effects.EffectType> effectedBy = new List<Effects.EffectType>();
    public GameObject destroyedPrefab;
    private bool destructible = true;
    private bool destroyed = false;

. Это класс, содержащий перечисление, которое я пытаюсь установить

[System.Serializable]
public class Effects 
{
    public bool usingEffect = false;
    public int effectOverTimeChance = 0;
    public EffectType effectType;
    public Stats.StatType effectedStat = Stats.StatType.health;
    public int minAmount;
    public int maxAmount;

 public enum EffectType
    {
        bleed,
        electric,
        fire,
        heal,
        physical,
        poison
    }

. Это мой текст JSON. что одно перечисление effectBy для последней записи

{
  "meleeWeapons": [
    {
      "id": 0,
      "prefabID": "claw",
      "title": "claw",
      "description": "razor sharp claws",
      "slotType": 4,
      "effects": [
        {
          "effectType": 4,
          "minAmount": 2,
          "maxAmount": 4
        }
      ]
    },
    {
      "id": 1,
      "title": "hammer",
      "description": "heavy and intimidating",
      "slotType": 4
    }
  ],
  "interactableObjects": [
    {
      "id": 2,
      "prefabID": "BasicCrate",
      "title": "crate",
      "effectedBy": [
        {
          "effectType": 4
        }
      ]
    }
  ]
}

Я могу обойти это, изменив effectBy на список эффектов и присвоив самому эффекту требуемое значение перечисления, но если бы я мог, я бы предпочел просто оставить его в качестве списка effectTypes. У кого-нибудь есть понимание этого?

Ответы [ 2 ]

0 голосов
/ 29 марта 2020

Я попытался создать новый interactiveableObject и просто установив значение ectedBy, затем записал его в JSON, что дало следующее:

{
"id": "",
"prefabID": "",
"title": "",
"description": "",
"itemPrefab": {
    "instanceID": 0
},
"myContainer": {
    "instanceID": 0
},
"health": {
    "current": 0.0,
    "minimum": 0.0,
    "maximum": 0.0,
    "rechargeRate": 0.0,
    "rechargeDelay": 0.0,
    "statType": 0
},
"effectedBy": [
    2
],
"type": 0,
"destroyedPrefab": {
    "instanceID": 0
}

}

Создание моего интерактивного объекта с моим текстовым файлом и присваивание перечислений без переменной effectType, а просто запись значения перечисления работает так, как я изначально предполагал:

"interactableObjects": [
    {
      "id": 2,
      "prefabID": "BasicCrate",
      "title": "crate",
      "effectedBy": [
        2,
        4
      ],
    }

]

0 голосов
/ 29 марта 2020
public List<Effects.EffectType> effectedBy = new List<Effects.EffectType>();

является основной проблемой. Этот код говорит, что у вас есть список (или массив) значений типа EffectType. К сожалению, это не форма вашего JSON:

"effectedBy": [
    {
      "effectType": 4
    }
]

Это не массив EffectType. Это массив объектов со свойством effectType типа EffectType.

. Поэтому вместо него следует использовать:

public List<EffectTypeWrapper> effectedBy = new List<EffectTypeWrapper>();

, где EffectTypeWrapper определяется как:

public class EffectTypeWrapper
{
    public EffectType effectType { get; set; }
}

В будущем я настоятельно рекомендую использовать https://app.quicktype.io/#l = cs & r = json2csharp (пример https://app.quicktype.io?share=4jOYgCbQhD7tmaJf10Ln).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...