【问题标题】:Issue with JSON serialization in UnityUnity 中的 JSON 序列化问题
【发布时间】:2016-07-11 10:47:42
【问题描述】:

我正在尝试使用 JSON 序列化一组自定义 Monobehaviours。我知道它不能直接完成,所以我使用包装类并对其进行序列化。

这是包装对象

[System.Serializable] 
public class WavesCollection {
public Wave[] waves;
}


这就是被包装的对象(只有它的重要部分)

[System.Serializable]
public class Wave : MonoBehaviour {
[SerializeField]public float[] AppearTimes;//第n个敌人出现的时候;
[SerializeField]public Vector2 [] position;//第n个敌人应该出现在哪里;
[SerializeField]public EnemyType[] EnemiesToAppear;//应该出现什么敌人
}



wavesArray = new Wave[] {thisWave, thisWave, thisWave};
WavesCollection 集合 = new WavesCollection();
collection.waves = new Wave[10];
wavesArray.CopyTo(collection. Waves, 0);
StreamWriter sw = File.CreateText(WritePath);
string json = JsonUtility.ToJson(collection);
sw.WriteLine(json);
sw.Close();


这就是执行序列化的代码。基本上,我有一个非空 Wave 对象数组,并将其复制到包装器对象。然后我尝试将其写入文件中,输出为

{"waves":[{"instanceID":-99992},{"instanceID":-99992},{"instanceID":-99992},{"instanceID":0},{"instanceID":0 },{"instanceID":0},{"instanceID":0},{"instanceID":0},{"instanceID":0},{"instanceID":0}]}


谁能给我一些关于我做错了什么的指示?

【问题讨论】:

  • 你的例外是什么?
  • 不抛出异常。问题是错误的东西被序列化了。
  • 为什么你从 MonoBehaviour 继承 Wave 类?请尝试不继承。
  • 我已经设法直接序列化 Wave 对象,例如将单个 Wave 对象转换为单个 JSON,并且效果很好。当我尝试序列化 Wave 对象数组时,问题就来了。因此,我相信从 MonoBehaviour 继承应该不会引起问题。

标签: c# json serialization unity3d mono


【解决方案1】:

我在使用可编写脚本的对象继承我的基类(在您的情况下为 Wave)时遇到了同样的问题,这给了我同样的问题。我可以放入一个对象并很好地传递它,但是在列表中得到了有问题的实例 ID。我删除了基类上所有形式的继承,它起作用了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 2021-05-28
    • 1970-01-01
    • 2011-05-30
    相关资源
    最近更新 更多