超全模态模型 × Harness 升级,升级解锁 ArkClaw,最新支持 DeepSeek-V4 系列与 GLM-5.1
执行以下代码:
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":[]}
{"name":"karan"}
{"name":"karan", "l":[]}
Unity的JsonUtility基于自身序列化系统,对于**空的非具象泛型集合(如List<object>)**会默认跳过序列化——因为它无法确定集合内元素的具体类型,也不会主动保留空集合的结构。
JsonUtility
List<object>
如果l集合的元素类型固定(比如都是string、自定义类),替换List<object>为具体类型的List,JsonUtility会正常序列化空集合:
l
public class a { public string name; // 示例:元素为string类型 public List<string> l; }
此时空List会被序列化为"l":[]。
"l":[]
创建继承自List<object>的自定义类并标记[Serializable],让Unity序列化系统识别它:
[Serializable]
[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)); }
空集合会被正常序列化输出。
在Unity Package Manager中安装com.unity.nuget.newtonsoft-json包,它的序列化逻辑更灵活,原生支持空泛型集合的序列化:
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":[]}输出。
{"name":"karan","l":[]}
如果不想修改类结构或引入第三方库,可先序列化再手动拼接空集合字段:
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
超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起
模型再升级,30秒超长叙事, 模态参考扩容
模型自由,工具不限,最新支持 Deepseek-V4 系列、GLM-5.3 系列
超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列
大模型19元起,Al应用9.9元畅享,新人首购爆款尽享优惠