我有一些数据需要序列化/反序列化,但 JsonUtility 只是没有做它应该做的事情。这是我正在使用的对象:
public class SpriteData {
public string sprite_name;
public Vector2 sprite_size;
public List<Vector2> subimage;
}
public class SpriteDataCollection
{
public SpriteData[] sprites;
}
如果我创建一个 SpriteDataCollection,并尝试使用 JsonUtility 对其进行序列化,我只会得到一个空对象 {}。这是它的构建方式:
SpriteData data = new SpriteData();
data.sprite_name = "idle";
data.sprite_size = new Vector2(64.0f, 64.0f);
data.subimage = new List<Vector2> { new Vector2(0.0f, 0.0f) };
SpriteDataCollection col = new SpriteDataCollection();
col.sprites = new SpriteData[] { data };
Debug.Log(JsonUtility.ToJson(col));
调试日志只打印“{}”。为什么它不序列化任何东西?我已经对其进行了测试,序列化单个 SpriteData 完全按照预期的方式进行,但它在 SpriteDataCollection 中不起作用。
最佳答案
有 4 个已知的可能原因会导致您在 Unity 中得到空 Json。
1。不包括[Serializable]
。如果你不包含它,你会得到空的 json。
2.使用属性(获取/设置)作为您的变量。 JsonUtility 不支持这一点。
3。尝试序列化 List
以外的集合。
4。您的 json 是多数组,JsonUtility
不支持,需要 wrapper去工作。
问题看起来像#1。您在类中缺少 [Serializable]
。您必须添加 using System;
才能使用它。
[Serializable]
public class SpriteData {
public string sprite_name;
public Vector2 sprite_size;
public List<Vector2> subimage;
}
和
[Serializable]
public class SpriteDataCollection
{
public SpriteData[] sprites;
}
5。就像上面在SpriteData
类中给出的例子,变量必须是一个公共(public)变量。如果是私有(private)变量,则在其顶部添加[SerializeField]
。
[Serializable]
public class SpriteDataCollection
{
[SerializeField]
private SpriteData[] sprites;
}
如果仍然无法正常工作,则您的 json 可能无效。阅读 "Serialize and Deserialize Json and Json Array in Unity" 中的答案“4.TROUBLESHOOTING JsonUtility”邮政。这应该让您了解如何解决这个问题。
关于c# - Unity C# JsonUtility 没有序列化列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41787091/