在序列化时将字符串 属性 值转换为 base64 For ASP.NET Core 3.0+

Convert string property value to base64 on serialization For ASP.NET Core 3.0+

我正在尝试在序列化为 JSON 时将选定的 string 值属性编码为 Base64,如以下问题所示:

Convert string property value to base64 on serialization

但我正在使用 System.Text.Json,因为随着 ASP.NET Core 3.0 的引入,默认的 JSON 序列化程序已从 Newtonsoft.Json 更改为 System.Text.Json.

如何修改 answer by Chris Richardson 以与 System.Text.Json 一起使用?

创建以下 custom JsonConverter<string>:

public class Base64EncodedStringConverter : JsonConverter<string>
{
    public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) =>
        Encoding.UTF8.GetString(reader.GetBytesFromBase64());

    public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options) =>
        writer.WriteBase64StringValue(Encoding.UTF8.GetBytes(value));
}

然后按如下方式将其应用于您的模型:

public class MyFoo 
{
    public string Value1 { get; set; }

    [System.Text.Json.Serialization.JsonConverter(typeof(Base64EncodedStringConverter))] // Fully qualified attribute name used for clarity
    public string Value2 { get; set; }
}

备注:

  • System.Text.Json 内置了对字节数组作为 Base64 的读写支持,因此无需手动编码和解码 Base64。

  • 如果您不想允许空字符串值,请将 JsonConverter<T>.HandleNull 覆盖为 return true 并根据需要从 Read() 抛出异常和 Write()(仅限 .NET 5 及更高版本)。

演示 fiddle here.