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
相关产品推荐
相关产品推荐

