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

如何在System.Text.Json序列化时将所有属性转为字符串类型?

使用System.Text.Json将数值/布尔属性序列化为字符串(不修改属性类型)

完全可以实现,不需要修改属性的原始类型,通过自定义JsonConverter就能搞定,下面分两种场景给出具体实现:

场景一:仅针对特定属性处理

如果只需要把个别属性转成字符串输出,给目标属性绑定自定义转换器即可:

1. 编写对应类型的转换器

比如处理int类型的转换器:

public class IntToStringConverter : JsonConverter<int>
{
    // 反序列化逻辑:支持字符串或原始数值转int
    public override int Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        if (reader.TokenType == JsonTokenType.String)
        {
            int.TryParse(reader.GetString(), out var result);
            return result;
        }
        return reader.GetInt32();
    }

    // 序列化逻辑:把int转为字符串输出
    public override void Write(Utf8JsonWriter writer, int value, JsonSerializerOptions options)
    {
        writer.WriteStringValue(value.ToString());
    }
}

同理,处理bool类型的转换器:

public class BoolToStringConverter : JsonConverter<bool>
{
    public override bool Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        if (reader.TokenType == JsonTokenType.String)
        {
            bool.TryParse(reader.GetString(), out var result);
            return result;
        }
        return reader.GetBoolean();
    }

    public override void Write(Utf8JsonWriter writer, bool value, JsonSerializerOptions options)
    {
        writer.WriteStringValue(value.ToString());
    }
}

2. 在目标属性上标记转换器

public class MyObj
{
    [JsonConverter(typeof(IntToStringConverter))]
    public int Version { get; set; }
    
    [JsonConverter(typeof(BoolToStringConverter))]
    public bool IsEnabled { get; set; }
}

3. 执行序列化

var myObj = new MyObj { Version = 10, IsEnabled = true };
var json = JsonSerializer.Serialize(myObj);
// 输出结果:{"Version":"10","IsEnabled":"True"}

场景二:全局所有数值/布尔类型统一处理

如果希望项目中所有int、bool、long等数值类型都序列化为字符串,直接在JsonSerializerOptions中全局注册转换器即可:

var serializeOptions = new JsonSerializerOptions();
serializeOptions.Converters.Add(new IntToStringConverter());
serializeOptions.Converters.Add(new BoolToStringConverter());
// 如需处理其他数值类型(如long、double),添加对应转换器即可

var myObj = new MyObj { Version = 10, IsEnabled = true };
var json = JsonSerializer.Serialize(myObj, serializeOptions);
// 输出结果:{"Version":"10","IsEnabled":"True"}

注意事项

  • 转换器中的Read方法做了兼容处理,既可以解析字符串形式的数值,也能解析原始数值类型,避免反序列化时出现报错;如果不需要反序列化逻辑,可以根据需求简化,但建议保留兼容逻辑。
  • 如果需要自定义字符串格式(比如bool输出"1"/"0"而不是"True"/"False"),修改转换器中Write方法的字符串输出逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 04:04:59