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

C# Newtonsoft.Json反序列化多构造函数类找不到构造函数问题问询

问题原因
  • Newtonsoft.Json 反序列化时默认优先使用无参构造函数实例化对象,你当前的License类只定义了两个带参构造函数,未提供无参构造函数
  • 现有两个带参构造函数的参数名称、类型和JSON返回字段无法完全匹配:
    • 错误响应的错误数据字段名为data,但你给错误数据属性标记的JsonProperty为error_data,第二个构造函数的参数名也为error_data,和JSON实际字段不匹配
    • 反序列化时JSON无法明确匹配到两个带参构造函数中的任意一个,因此抛出找不到构造函数的错误
解决方案

方案一:极简修复(推荐)

仅需两步就可以兼容现有业务逻辑:

  1. 给License类添加无参构造函数
public License()
{
    // 空实现即可,Newtonsoft.Json会自动通过属性上的JsonProperty标记完成赋值
}
  1. 调整data字段属性定义,兼容两种场景的返回值
// 删除原有的Success_Data和Error_Data两个属性,合并为一个通用data属性
[JsonProperty("data")]
public object Data { get; set; }

后续使用时自行判断场景做类型转换即可:

License license = JsonConvert.DeserializeObject<License>(json_str);
if (license.Success == true)
{
    Success_Data successData = license.Data as Success_Data;
    // 处理成功业务逻辑
}
else if (!string.IsNullOrEmpty(license.Code))
{
    Error_Data errorData = license.Data as Error_Data;
    // 处理错误业务逻辑
}

方案二:自定义JsonConverter(无需修改原有License类结构)

如果你不想调整原有类的属性和构造函数定义,可以自定义JSON转换器直接匹配两种响应场景:

public class LicenseJsonConverter : JsonConverter<License>
{
    public override License ReadJson(JsonReader reader, Type objectType, License existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        JObject jObj = JObject.Load(reader);
        // 判断为成功响应
        if (jObj.ContainsKey("success"))
        {
            return new License(
                jObj["success"].Value<bool>(),
                jObj["data"].ToObject<Success_Data>(serializer)
            );
        }
        // 判断为错误响应
        return new License(
            jObj["code"].Value<string>(),
            jObj["message"].Value<string>(),
            jObj["data"].ToObject<Error_Data>(serializer)
        );
    }

    public override void WriteJson(JsonWriter writer, License value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
}

反序列化时指定转换器即可:

License license = JsonConvert.DeserializeObject<License>(json_str, new LicenseJsonConverter());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:30:00