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

.NET Core5迁移至6后Newtonsoft.Json反序列化Tuple报错如何解决?

.NET Core 5迁移至6时Newtonsoft.Json序列化Tuple的发布环境问题及解决方案

问题背景

项目从.NET Core 5迁移到.NET Core 6后,后端使用Newtonsoft.Json序列化Tuple<MainConfiguration, SecondaryConfiguration>对象,前端进行反序列化时出现异常:开发环境运行正常,但发布后浏览器控制台抛出序列化异常。

原序列化代码

var content = new Tuple<MainConfiguration, SecondaryConfiguration>(mainConfiguration, secondaryConfiguration);
var serializedContent = JsonConvert.SerializeObject(content);

原反序列化代码

var data = JsonConvert.DeserializeObject<Tuple<MainConfiguration, SecondaryConfiguration>>(serializedContent ?? string.Empty);

报错信息

发布后浏览器控制台输出如下异常:

ThreadPool Callback threw an unhandled exception of type Newtonsoft.Json.JsonSerializationException
window.Module.s.printErr @ blazor.webassembly.js:1

问题排查

经定位,异常根源在于前端对.NET原生Tuple对象的反序列化,后端序列化过程无异常。

解决方案

使用自定义类替代.NET原生Tuple对象,具体实现如下:

自定义Tuple替代类

public class ConfigurationTuple
{
    public ConfigurationTuple() { }

    public ConfigurationTuple(MainConfiguration item1, SecondaryConfiguration item2)
    {
        Item1 = item1;
        Item2 = item2;
    }

    public MainConfiguration Item1 { get; set; }
    public SecondaryConfiguration Item2 { get; set; }
}

替换后的序列化代码

var content = new ConfigurationTuple(mainConfiguration, secondaryConfiguration);
var serializedContent = JsonConvert.SerializeObject(content);

替换后的反序列化代码

var data = JsonConvert.DeserializeObject<ConfigurationTuple>(serializedContent ?? string.Empty);

总结

在.NET Core 5迁移至6的场景下,使用Newtonsoft.Json进行前后端序列化交互时,应避免使用.NET原生Tuple对象,改用自定义类替代,问题核心出在前端反序列化环节。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:05:20