You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:Unity JsonUtility无法序列化自定义类嵌套字段的原因

Unity 2019.1中JsonUtility无法序列化嵌套结构体的问题解决

你的问题出在Unity 2019.1版本的JsonUtility对嵌套结构体的序列化支持上——当根对象是包含自定义结构体字段的结构体时,即使所有类型都标记了[Serializable],嵌套字段也无法被正确序列化,而单个结构体的序列化不受影响,这是该版本的已知行为限制。

解决方案

这里提供三种可行的修复方式:

1. 将根结构体改为类

把Foo从结构体改为类,即可正常序列化嵌套字段:

[Serializable]
struct Bar {
    public string baz;
}
[Serializable]
class Foo { // 修改为class
    public Bar bar;
}

测试代码无需修改,此时序列化Foo会输出正确的JSON:{"bar":{"baz":"testing"}}。

2. 用包装类包裹根结构体

如果必须保留Foo为结构体,可以创建一个类来包裹它:

[Serializable]
struct Bar {
    public string baz;
}
[Serializable]
struct Foo {
    public Bar bar;
}
[Serializable]
class FooWrapper {
    public Foo foo;
}

测试时序列化包装类实例:

var foo = new Foo();
var bar = new Bar();
bar.baz = "testing";
foo.bar = bar;
var wrapper = new FooWrapper { foo = foo };
Debug.Log("Foo json serialization: " + JsonUtility.ToJson(wrapper));

输出结果为{"foo":{"bar":{"baz":"testing"}}},嵌套数据被正确序列化。

3. 升级Unity版本

该嵌套结构体序列化的问题在Unity 2019.3及后续版本中已被官方修复,如果项目允许升级,直接更新到更高版本即可无需修改代码解决问题。

原因说明

Unity的JsonUtility基于内部序列化系统实现,2019.1版本对结构体嵌套的处理逻辑存在局限:当根对象是结构体时,系统无法正确遍历并序列化其内部的结构体字段;而单个结构体或结构体作为类的字段时,序列化逻辑可以正常运行。

内容的提问来源于stack exchange,提问作者des54321

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 03:07:34