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

标签 c# json unity3d serialization

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

相关文章:

c# - 如何将 MvcMiniProfiler 与 MvcTurbine 一起使用?

javascript - 道场 : How to make PUT request on jsonRest store with callback method

c# - 计算 Unity 场景中的帧率

c# - 单卡怎么拖

c# - Web 浏览器未触发 DocumentCompleted 事件

c# - 在 C# 中获取对 "thismember"的引用

C# List<object> AddRange of DBNull.Value

json - 从 json 合并两个 map[string]interface{}

php - 意外 token '<' - AJAX

opencv - 右手摄像机到左手,OpenCV到Unity