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

.NET 8 Blazor Web App启用AOT时JsonSerializer抛出异常

解决Blazor WebAssembly AOT模式下JsonSerializer反射序列化禁用异常

当Blazor WebAssembly项目启用AOT后,.NET 8会默认禁用基于反射的JSON序列化——不管是Release还是调试模式,这就是你遇到异常的原因。下面提供两种可行的解决方法:

方法1:使用System.Text.Json源生成器(推荐)

源生成器是AOT友好的方案,它在编译时生成序列化代码,完全避免反射。

  1. 创建一个Json序列化上下文类,指定你需要序列化的类型:
using System.Text.Json.Serialization;

namespace YourProjectNamespace;

// 这里添加你需要序列化的所有类型,比如string、自定义实体类等
[JsonSerializable(typeof(string))]
public partial class AppJsonSerializerContext : JsonSerializerContext
{
}
  1. 在需要序列化的地方,使用这个上下文来执行操作:
@code{
    protected override void OnInitialized()
    {
        var test = System.Text.Json.JsonSerializer.Serialize(
            "Hello World", 
            AppJsonSerializerContext.Default.String
        );
    }
}

方法2:显式配置TypeInfoResolver

如果你暂时不想用源生成器,可以显式配置JsonSerializerOptions.TypeInfoResolver,允许使用反射序列化(注意:此方法在AOT下可能有性能损耗,且需要确保所有要序列化的类型都能被正确处理):

@code{
    protected override void OnInitialized()
    {
        var options = new System.Text.Json.JsonSerializerOptions
        {
            TypeInfoResolver = new System.Text.Json.Serialization.Metadata.DefaultJsonTypeInfoResolver()
        };
        var test = System.Text.Json.JsonSerializer.Serialize("Hello World", options);
    }
}

补充说明

.NET 8对Blazor WASM的AOT模式做了调整,调试模式下也默认禁用了反射序列化,以此对齐Release模式的行为,确保开发阶段就能提前发现AOT兼容性问题,避免发布后出现意外。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 22:58:15