如何使用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
相关产品推荐
相关产品推荐

