gpt4 book ai didi

c# - Unity C# JsonUtility 没有序列化列表

转载 作者:可可西里 更新时间:2023-11-01 08:38:04 33 4
gpt4 key购买 nike

我有一些数据需要序列化/反序列化,但 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/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com