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

如何在Blazor .NET 6的WebAssemblyHostBuilder中配置JsonOptions?

解决Blazor .NET 6中注册DateOnly JsonConverter的问题

根据你的场景,Blazor项目分为WebAssembly(WASM)和Server两种类型,对应不同的配置方式,以下是针对性的解决方案:

针对Blazor WebAssembly项目

无需额外安装冲突包,可通过两种方式配置:

方法1:为HttpClient配置Json转换器

Blazor WASM中默认通过HttpClient与API通信,直接在注册HttpClient时添加转换器:

var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("#app");
builder.RootComponents.Add<HeadOutlet>("head::after");

// 配置HttpClient并添加DateOnly转换器
builder.Services.AddScoped(sp => 
    new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }
    .ConfigureHttpClientJsonOptions(options => 
        options.SerializerOptions.Converters.Add(new DateOnlyJsonConverter())
    )
);

await builder.Build().RunAsync();

方法2:注册全局JsonSerializerOptions

如果需要在全局范围内使用统一的序列化配置,可将配置注册为单例服务:

builder.Services.AddSingleton(new JsonSerializerOptions
{
    Converters = { new DateOnlyJsonConverter() },
    // 可添加其他全局配置,比如忽略空值、驼峰命名等
    IgnoreNullValues = true,
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase
});

之后在组件或服务中注入JsonSerializerOptions,直接用于序列化/反序列化操作。

针对Blazor Server项目

Blazor Server可通过配置RazorPages或SignalR的Json选项实现:

方法1:配置RazorPages的Json选项

该方式不会引入MVC相关冲突,直接为RazorPages添加转换器:

var builder = WebApplication.CreateBuilder(args);

// 添加RazorPages并配置DateOnly转换器
builder.Services.AddRazorPages()
    .AddJsonOptions(options => 
        options.JsonSerializerOptions.Converters.Add(new DateOnlyJsonConverter())
    );

builder.Services.AddServerSideBlazor();
builder.Services.AddSingleton<WeatherForecastService>();

var app = builder.Build();
// ... 其他中间件配置
app.Run();

方法2:配置SignalR的Json序列化(可选)

如果Blazor Server的SignalR通信需要处理DateOnly类型,可单独配置Hub选项:

builder.Services.AddServerSideBlazor()
    .AddHubOptions(options => 
        options.JsonSerializerOptions.Converters.Add(new DateOnlyJsonConverter())
    );

补充:DateOnlyJsonConverter实现参考

确保你的转换器实现正确,示例如下:

using System.Globalization;
using System.Text.Json;
using System.Text.Json.Serialization;

public class DateOnlyJsonConverter : JsonConverter<DateOnly>
{
    private const string DefaultDateFormat = "yyyy-MM-dd";

    public override DateOnly Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        var dateStr = reader.GetString();
        return DateOnly.ParseExact(dateStr!, DefaultDateFormat, CultureInfo.InvariantCulture);
    }

    public override void Write(Utf8JsonWriter writer, DateOnly value, JsonSerializerOptions options)
    {
        writer.WriteStringValue(value.ToString(DefaultDateFormat, CultureInfo.InvariantCulture));
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 21:00:58