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

.NET Core 2.2升级到.NET 6后Newtonsoft.Json反序列化失效问题

.NET 6升级后Newtonsoft反序列化失效的解决方法

方法一:直接操作JsonElement提取数据

.NET 6中动态参数默认是System.Text.Json.JsonElement,需通过其API获取目标数据:

  • 强转dynamic参数为JsonElement:var jsonElement = (JsonElement)mapping;
  • 获取"data"节点对应的JsonElement:var dataElement = jsonElement.GetProperty("data");
  • 将节点转为原始JSON字符串后用Newtonsoft反序列化:
var jsonString = dataElement.GetRawText();
var mappingList = JsonConvert.DeserializeObject<List<CustomBranchMappingDto>>(jsonString);

方法二:全局配置ASP.NET Core使用Newtonsoft.Json

若想恢复.NET Core 2.2的参数处理逻辑,让动态参数回到Newtonsoft的JObject:

  1. 安装NuGet包:Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson
  2. 在Program.cs中修改服务配置:
builder.Services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        // 可根据需求配置序列化规则,比如保留默认属性命名
        options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver();
    });

配置完成后,原有代码JsonConvert.DeserializeObject<List<CustomBranchMappingDto>>(mapping.data.ToString())即可正常运行。

方法三:修复Newtonsoft反序列化空值/0值问题

若转JSON字符串后反序列化出现属性全为空或0,通常是属性命名不匹配导致:

  • 给Dto类的属性添加Newtonsoft的JsonProperty特性,指定JSON键名:
public class CustomBranchMappingDto
{
    [JsonProperty("ours")]
    public int Ours { get; set; }

    [JsonProperty("theirs")]
    public string Theirs { get; set; }

    [JsonProperty("companyId")]
    public int CompanyId { get; set; }
}
  • 或者全局配置Newtonsoft自动适配驼峰命名:
var serializerSettings = new JsonSerializerSettings
{
    ContractResolver = new CamelCasePropertyNamesContractResolver()
};
var mappingList = JsonConvert.DeserializeObject<List<CustomBranchMappingDto>>(jsonString, serializerSettings);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 09:57:51