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

.NET 8 API JSON序列化失败:JsonTypeInfo错误求助

解决.NET 8中JsonTypeInfo metadata未提供的错误

错误原因

在.NET 8中,使用源生成式JSON序列化(通过JsonSerializerContext和JsonSerializable特性)时,必须将自定义序列化上下文配置到ASP.NET Core的MVC服务中。如果未配置,框架无法找到对应的TypeInfoResolver,就会抛出你遇到的错误——哪怕是string这类基础类型,也会因为序列化配置缺失而无法正常解析。

解决方案

1. 修改序列化上下文的访问修饰符

由于AppJsonSerializerContext2位于类库项目(BFNG_Library)中,主项目(BFNG_Program)需要访问它,因此需将其从internal改为public,同时可添加string类型的序列化支持(可选,但能避免基础类型的解析问题):

[JsonSerializable(typeof(App_admin))]
[JsonSerializable(typeof(List<App_admin>))]
[JsonSerializable(typeof(string))]
public partial class AppJsonSerializerContext2 : JsonSerializerContext
{
}

2. 在Program.cs中配置MVC使用自定义序列化上下文

在主项目的Program.cs里,添加控制器服务时指定JSON序列化选项使用你的源生成上下文:

var builder = WebApplication.CreateBuilder(args);

// 配置控制器并指定源生成的JSON序列化上下文
builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.TypeInfoResolver = AppJsonSerializerContext2.Default;
    });

var app = builder.Build();

app.UseRouting();
app.MapControllers();

app.Run();

3. 验证类库项目配置(可选)

确保类库项目的.csproj文件中启用了可空引用类型和序列化源生成:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <Nullable>enable</Nullable>
    <GenerateSerializationAssemblies>On</GenerateSerializationAssemblies>
  </PropertyGroup>
</Project>

验证

完成上述配置后,重新启动项目,调用api/admin/create接口时,无论是传入App_admin类型还是string类型的JSON参数,都能正常解析,不会再抛出JsonTypeInfo metadata相关的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 17:15:00