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

Unity中JsonUtility转JSON时,空List<object>未序列化显示的问题

Unity中JsonUtility序列化空List不显示的解决方法

问题重现

执行以下代码:

private void Start()
{
    a data = new a
    {
        name = "karan",
        l = new List<object>()
    };

    Debug.Log(JsonUtility.ToJson(data));
}

public class a
{
    public string name;
    public List<object> l;
}

实际输出:{"name":"karan"}
预期输出:{"name":"karan", "l":[]}

原因

Unity的JsonUtility基于自身序列化系统,对于**空的非具象泛型集合(如List<object>)**会默认跳过序列化——因为它无法确定集合内元素的具体类型,也不会主动保留空集合的结构。

解决方案

1. 改用具体类型的List(业务允许时优先)

如果l集合的元素类型固定(比如都是string、自定义类),替换List<object>为具体类型的List,JsonUtility会正常序列化空集合:

public class a
{
    public string name;
    // 示例:元素为string类型
    public List<string> l;
}

此时空List会被序列化为"l":[]。

2. 自定义可序列化的List包装类

创建继承自List<object>的自定义类并标记[Serializable],让Unity序列化系统识别它:

[Serializable]
public class ObjectList : List<object> { }

public class a
{
    public string name;
    public ObjectList l;
}

初始化时使用自定义类:

private void Start()
{
    a data = new a
    {
        name = "karan",
        l = new ObjectList()
    };

    Debug.Log(JsonUtility.ToJson(data));
}

空集合会被正常序列化输出。

3. 改用Newtonsoft.Json(复杂场景推荐)

在Unity Package Manager中安装com.unity.nuget.newtonsoft-json包,它的序列化逻辑更灵活,原生支持空泛型集合的序列化:

using Newtonsoft.Json;

private void Start()
{
    a data = new a
    {
        name = "karan",
        l = new List<object>()
    };

    Debug.Log(JsonConvert.SerializeObject(data));
}

直接就能得到预期的{"name":"karan","l":[]}输出。

4. 手动补全JSON内容(临时应急方案)

如果不想修改类结构或引入第三方库,可先序列化再手动拼接空集合字段:

private void Start()
{
    a data = new a
    {
        name = "karan",
        l = new List<object>()
    };

    string baseJson = JsonUtility.ToJson(data);
    if (data.l.Count == 0)
    {
        string finalJson = baseJson.TrimEnd('}') + ",\"l\":[]}";
        Debug.Log(finalJson);
    }
    else
    {
        Debug.Log(baseJson);
    }
}

注意:该方法仅适合简单JSON结构,复杂嵌套场景易出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:57:14