Unity中JSON反序列化后UserData对象字段为空问题
问题根源
Unity自带的JsonUtility.FromJson不识别Newtonsoft.Json的[JsonProperty]特性。它会严格按照字段名的大小写匹配JSON中的键,你的类字段是UID、Email、Password(大驼峰),但JSON中的键是uid、email、password(全小写),导致无法匹配,所以字段保留默认值(0和null)。
解决方法
方法1:统一字段名与JSON键的大小写
修改类的字段名,使其和JSON中的键完全一致,同时移除[JsonProperty]特性:
[System.Serializable] public class UserData { public int uid; public string email; public string password; }
这样JsonUtility.FromJson就能正确匹配并反序列化。
方法2:切换到Newtonsoft.Json(Json.NET)
如果你想保留类的大驼峰字段名和[JsonProperty]特性,可以使用Newtonsoft.Json进行反序列化:
- 先在Unity包管理器中安装"Newtonsoft Json"包(Window > Package Manager,搜索Newtonsoft Json)。
- 使用以下代码反序列化:
UserData parsedUserData = Newtonsoft.Json.JsonConvert.DeserializeObject<UserData>(stringUserData);
这也是之前功能正常时最可能使用的方案。
方法3:使用System.Text.Json(Unity 2020.1+)
如果你的Unity版本在2020.1及以上,可以用System.Text.Json配合[JsonPropertyName]特性:
using System.Text.Json.Serialization; [System.Serializable] public class UserData { [JsonPropertyName("uid")] public int UID; [JsonPropertyName("email")] public string Email; [JsonPropertyName("password")] public string Password; } // 反序列化代码 UserData parsedUserData = System.Text.Json.JsonSerializer.Deserialize<UserData>(stringUserData);
内容的提问来源于stack exchange,提问作者amitklein
相关产品推荐
相关产品推荐

