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

Unity使用JsonUtility读取JSON无报错但获取数据为空问题求助

问题原因

  • JSON根结构与反序列化目标类不匹配:你的JSON根节点是一个包含Dialogue字段的对象,并非直接的Dialogue类结构,直接反序列化到Dialogue类无法匹配到对应字段,所以得到空对象。
  • 字段类型不匹配:Dialogue类中定义的sentences是string[]类型,但JSON里的sentences是包含text1/text2/text3三个属性的对象数组,类型不匹配会直接导致解析失败。

解决方法

第一步:调整类定义匹配JSON结构

新增根节点包裹类,同时新增Sentence类对应sentences数组内的对象结构:

[System.Serializable]
public class JsonRoot
{
    // 字段名需和JSON根节点下的Dialogue字段完全一致
    public Dialogue Dialogue;
}

[System.Serializable]
public class Sentence
{
    // 字段名和JSON里sentence对象的属性完全对应
    public string text1;
    public string text2;
    public string text3;
}

[System.Serializable]
public class Dialogue 
{
    public string npcName;
    // 将原有的string[]替换为Sentence数组,匹配JSON结构
    public Sentence[] sentences;
}

第二步:修改反序列化逻辑

将反序列化目标改为根节点类,再从中提取Dialogue对象即可:

public TextAsset jsonScript;
public Dialogue dialogue;

void Start()
{
    try
    {
        // 先反序列化到根包裹类
        JsonRoot root = JsonUtility.FromJson<JsonRoot>(jsonScript.text);
        dialogue = root.Dialogue;
    }
    catch (System.Exception error)
    {
        Debug.LogError(error);
    }
}

注意事项

  • Unity的JsonUtility对字段名大小写敏感,类内字段名必须和JSON里的属性名完全一致,包括大小写,否则会解析失败。
  • 所有参与序列化/反序列化的自定义类必须加[System.Serializable]特性,否则JsonUtility无法识别。

内容的提问来源于stack exchange,提问作者can çağlar kırıcı

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 10:57:02