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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 15:12:05