使用Newtonsoft.Json无法将JObject转换为自定义Transform对象
问题解决:Newtonsoft.Json反序列化Transform对象失败
问题根源
你的问题出在SerializableVector2的构造函数参数与JSON键名的大小写不匹配:Newtonsoft.Json默认对构造函数参数的大小写敏感,无法将JSON中的"X"/"Y"映射到构造函数的小写x/y参数,导致无法正确初始化SerializableVector2实例;而System.Text.Json默认支持大小写不敏感的构造函数参数匹配,这就是两者表现差异的核心原因。
解决方案
方案1:修改构造函数参数名匹配JSON键
直接将SerializableVector2的构造函数参数改为大写,与JSON中的键名完全一致:
[Serializable] public class SerializableVector2 { private float x; private float y; [JsonConstructor] public SerializableVector2(float X, float Y) { this.x = X; this.y = Y; } // 其余代码保持不变 }
方案2:给构造函数参数添加JsonProperty标注
如果不想修改参数名,可通过[JsonProperty]指定参数对应的JSON键:
[Serializable] public class SerializableVector2 { private float x; private float y; [JsonConstructor] public SerializableVector2([JsonProperty("X")] float x, [JsonProperty("Y")] float y) { this.x = x; this.y = y; } // 其余代码保持不变 }
方案3:配置Newtonsoft.Json忽略大小写
若不想修改类结构,可在反序列化时配置全局序列化规则,让其忽略大小写:
var settings = new JsonSerializerSettings { ContractResolver = new DefaultContractResolver { NamingStrategy = new CamelCaseNamingStrategy { IgnoreCase = true, OverrideSpecifiedNames = false } } }; JObject j = JObject.Load(reader); Transform transform = j["Transform"].ToObject<Transform>(JsonSerializer.Create(settings));
以上任意一种方案都能让Transform对象正确填充JSON中的Position和Scale值。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

