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

如何使用System.Text.Json将对象序列化/反序列化为单个字符串

使用System.Text.Json实现ValidationType与字符串的序列化/反序列化

要实现ValidationType对象和单个字符串的互相序列化/反序列化,需要自定义Json转换器来覆盖默认的序列化逻辑,具体步骤如下:

1. 定义基础类ValidationType

public class ValidationType
{
    public string Value { get; set; }
}

2. 自定义Json转换器

创建继承自JsonConverter<ValidationType>的转换器类,实现序列化和反序列化的核心逻辑:

public class ValidationTypeConverter : JsonConverter<ValidationType>
{
    // 序列化:将ValidationType对象转为单个字符串
    public override void Write(Utf8JsonWriter writer, ValidationType value, JsonSerializerOptions options)
    {
        writer.WriteStringValue(value?.Value);
    }

    // 反序列化:将单个字符串转为ValidationType对象
    public override ValidationType Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        if (reader.TokenType == JsonTokenType.String)
        {
            return new ValidationType { Value = reader.GetString() };
        }
        // 处理非字符串输入的异常场景
        throw new JsonException("ValidationType需要字符串类型的输入值");
    }
}

3. 实际使用转换器

序列化和反序列化时,需要将自定义转换器加入JsonSerializerOptions配置中:

// 序列化示例
var validationType = new ValidationType() { Value = "Error" };
var options = new JsonSerializerOptions();
options.Converters.Add(new ValidationTypeConverter());

string jsonStr = JsonSerializer.Serialize(validationType, options);
// 输出结果:"Error"

// 反序列化示例
ValidationType deserialized = JsonSerializer.Deserialize<ValidationType>(jsonStr, options);
// deserialized.Value 结果为 "Error"

补充说明

  • 序列化时,转换器直接输出ValidationType的Value属性值,避免了默认的对象结构序列化结果(如{"Value":"Error"})。
  • 反序列化时,会校验输入的JSON token类型,确保是字符串后再封装为ValidationType对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 17:54:30