如何将JSON中的整数反序列化为字符串?(System.Text.Json场景)
解决方案
有两种常用方式可以实现将JSON整数反序列化为字符串的需求,以下结合你的源生成上下文代码进行说明:
方法一:自定义转换器并绑定到目标属性
- 先创建一个自定义JSON转换器,专门处理数字到字符串的反序列化逻辑:
public class NumberToStringConverter : JsonConverter<string> { public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { // 处理JSON中的数字类型(整数、浮点数) if (reader.TokenType == JsonTokenType.Number) { return reader.GetInt64().ToString(); // 若需支持浮点数转换,可替换为 reader.GetDouble().ToString() } // 兼容原本就是字符串的JSON字段 else if (reader.TokenType == JsonTokenType.String) { return reader.GetString(); } // 其他不支持的类型抛出异常,也可根据需求返回默认值 throw new JsonException("无法将当前JSON值转换为字符串类型"); } public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options) { // 序列化时默认输出为字符串,若需要将合法数字字符串转回数字输出,可自行扩展逻辑 writer.WriteStringValue(value); } }
- 将该转换器绑定到
OrderInfo的UserReference属性上:
public partial class OrderInfo { [JsonConverter(typeof(NumberToStringConverter))] public string UserReference { get; set; } }
修改完成后,JSON中的数字123会被自动转换为字符串"123"赋值给UserReference。
方法二:在源生成上下文全局配置转换器
如果多个属性都需要数字转字符串的处理,可以直接在上下文层面全局配置转换器:
- 先创建上述的
NumberToStringConverter类。 - 修改
OrderInfoContext的特性配置:
[JsonSerializable(typeof(OrderInfo), GenerationMode = JsonSourceGenerationMode.Metadata)] [JsonSourceGenerationOptions(Converters = new[] { typeof(NumberToStringConverter) })] public partial class OrderInfoContext : JsonSerializerContext { }
这种方式会让上下文处理的所有string类型属性,都自动应用数字转字符串的反序列化逻辑。
验证效果
修改后运行代码,可通过打印验证结果:
Console.WriteLine(s.UserReference); // 输出 "123" Console.WriteLine(s.UserReference.GetType()); // 输出 System.String
内容的提问来源于stack exchange,提问作者Guillaume Paris
相关产品推荐
相关产品推荐

