You need to enable JavaScript to run this app. 从Newtonsoft迁移到System.Text.Json如何实现数字自动转布尔值
优惠活动
大模型
产品
解决方案
定价
更多

从Newtonsoft迁移到System.Text.Json如何实现数字自动转布尔值

解决方案

System.Text.Json 未提供内置开关实现数字转布尔的兼容逻辑,需自行实现自定义转换器,步骤如下:

1. 实现自定义布尔转换器

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

public class BooleanConverter : JsonConverter<bool>
{
    public override bool Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        // 处理数字类型输入
        if (reader.TokenType == JsonTokenType.Number)
        {
            return reader.GetInt32() != 0;
        }
        // 处理原生布尔类型输入
        if (reader.TokenType == JsonTokenType.True || reader.TokenType == JsonTokenType.False)
        {
            return reader.GetBoolean();
        }
        // 可选扩展:如果需要支持字符串格式的布尔值可自行添加对应逻辑
        throw new JsonException($"无法将值 {reader.GetString()} 转换为布尔类型");
    }

    public override void Write(Utf8JsonWriter writer, bool value, JsonSerializerOptions options)
    {
        // 序列化默认输出原生布尔值,符合接口规范要求
        writer.WriteBooleanValue(value);
        // 若需要序列化时输出1/0格式,可替换为下方代码
        // writer.WriteNumberValue(value ? 1 : 0);
    }
}

2. 注册使用转换器

单次序列化/反序列化使用

var options = new JsonSerializerOptions();
options.Converters.Add(new BooleanConverter());
OutputState s1 = JsonSerializer.Deserialize<OutputState>(data, options);

ASP.NET Core 全局注册

在 Program.cs 中添加配置即可对所有接口生效:

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.Converters.Add(new BooleanConverter());
    });

配置完成后,System.Text.Json 就会和 Newtonsoft.Json 行为一致:自动将数字0转为false,非0数字转为true,同时仍然支持原生的true/false布尔值输入,不影响符合规范的请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 00:51:01