Десериализация json в единице ничего не возвращает - PullRequest
0 голосов
/ 29 мая 2020

Я использую Jsonutility, файл json читается правильно, но при проверке значений класса я получаю 0. Я просмотрел похожие вопросы, но результат тот же, я получаю либо 0, либо ноль всякий раз, когда проверяю значения после десериализации. Я думаю, проблема в том, как отформатирован json.

вот мой json:

    {
   "StatsValues":{
      "HealthStat":{
         "_Min":700,
         "_Max":1200,
         "_Color":"255,255,255",
         "_Opacity":0.1
      },
      "SickStat":[
         {
            "name":"Sickness 1 name",
            "_Min":700,
            "_Max":1200,
            "_Color":"255,255,255",
            "_Opacity":0.1
         },
         {
            "name":"Sickness 2 name",
            "_Min":700,
            "_Max":1200,
            "_Color":"255,255,255",
            "_Opacity":0.1
         },
         {
            "name":"Sickness 3 name",
            "_Min":700,
            "_Max":1200,
            "_Color":"255,255,255",
            "_Opacity":0.1
         },
         {
            "name":"Sickness 4 name",
            "_Min":700,
            "_Max":1200,
            "_Color":"255,255,255",
            "_Opacity":0.1
         }
      ]
   }
}

и мой код:

StatsValues _stats = JsonUtility.FromJson<StatsValues>(jsonFile);


    [System.Serializable]
public class StatsValues
{
    public HealthStat _healthStats;
    public List<SickStat> _sickStats;
}

[System.Serializable]
public class HealthStat
{
    public int _Min;
    public int _Max;
    public string _Color;
    public float _Opacity;
}

[System.Serializable]
public class SickStat
{
    public string name;
    public int _Min;
    public int _Max;
    public string _Color;
    public float _Opacity;
}

1 Ответ

0 голосов
/ 29 мая 2020
  1. У вас есть еще один уровень вложения в вашем JSON, поскольку объект "StatsValues" заключен в дополнительный { }, поэтому вокруг него есть еще один объект типа

  2. Имена поля ваших классов должны точно совпадать с именами полей в JSON. (Имена классов не имеют значения.)

    У вас есть "HealthStat" : ... и "SickStat" : ...

, поэтому должно быть:

Data _stats = JsonUtility.FromJson<Data>(jsonFile);
var _healthStat = _stats.StatsValues.HealthStat;

[Serializable]
public class Data
{
    public StatsValues StatsValues;
}

[Serializable]
public class StatsValues
{
    public HealthStat HealthStat;
    public List<SickStat> SickStat;
}

и для того, чтобы быть немного больше c#, как вы могли бы сделать

[Serializable]
public class StatsValues
{
    public Stat HealthStat;
    public List<SickStat> SickStat;
}

[Serializable]
public class Stat
{
    public int _Min;
    public int _Max;
    public string _Color;
    public float _Opacity;
}

[Serializable]
public class SickStat : Stat
{
    public string name;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...