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

Unity中JsonUtility无法反序列化指定字符串字段问题

问题解决方案:Unity JsonUtility 反序列化部分字段为null

核心原因分析

你的问题主要出在JSON格式不合法以及字段名匹配不一致两个方面,以下是具体排查和解决步骤:

1. 修复JSON语法错误

你提供的原始JSON片段存在严重语法问题:

  • 字段之间缺少逗号分隔,比如name:"" description:""thumbnailAddress:""imageAddress:""这一段,多个键值对直接连在一起,没有用逗号分隔;
  • 布尔值使用了True(大写),而标准JSON要求布尔值为小写true/false;
  • 数组和对象的包裹格式不完整(比如items字段的值没有用[]包裹为数组)。

这些语法错误会导致JsonUtility无法正确识别name、description等字段,直接返回null。

修正后的合法JSON片段示例:

{
  "categories": [
    {
      "id": "TabType.TabTypes.candles",
      "enabled": true,
      "items": [
        {
          "id": "VIRTUALSHOP_5_ANCIENTARCANE_FOR_AMIRITE",
          "name": "",
          "description": "",
          "thumbnailAddress": "",
          "imageAddress": "",
          "SizeType": "_256x256",
          "Style": "natural",
          "Currency": "currencyTest1",
          "ObjectType": "cardSkin",
          "Price": 0,
          "Level": 0,
          "TabType": "favorites",
          "TabSubGroup": "staticTabs",
          "TimeLimited": false
        }
      ]
    }
  ]
}

2. 确保字段名完全匹配

Unity的JsonUtility是大小写敏感的,必须保证结构体字段名与JSON键名完全一致:

  • 检查CategoryConfig中的enabledFlag字段:你的JSON里用的是enabled键,两者不匹配,会导致该字段无法正确赋值;
  • 确认ItemConfig中的name、description等字段名,和JSON中的键(比如"name")大小写完全一致,不能出现拼写或大小写差异。

修正后的CategoryConfig字段示例:

[Serializable]
public struct CategoryConfig
{
    public string id;
    public bool enabled; // 改为与JSON键名一致的"enabled"
    public List<ItemConfig> items;

    // ... 其他代码保持不变
}

3. 验证JSON格式合法性

在解析前,先通过Unity的Debug.Log输出完整的JSON字符串,复制后用JSON语法检查工具确认格式完全合法,没有遗漏逗号、引号或括号。

4. 规范布尔值格式

你观察到timeLimited字段的自动转换属于非标准行为,JsonUtility仅在特定情况下会将"yes"/"no"转换为bool,但为了避免解析异常,建议统一将JSON中的布尔值改为标准的true/false(小写)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 13:07:01