统一反序列化json不会返回任何内容

时间:2020-05-29 12:37:00

标签: json unity3d

我正在使用Jsonutility,可以正确读取json文件,但是在检查类的值时,我得到0。我环顾了类似的问题,但是结果是相同的,只要检查值,我要么为0,要么为null反序列化后。我认为问题在于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 :(得分:0)

  1. 由于"StatsValues"对象被包装在附加的{ }中,因此在JSON中还有一个嵌套级别,因此周围还有一个类型对象

  2. 您的类的 field 名称必须与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;
}