【问题标题】:Convert string property value to base64 on serialization For ASP.NET Core 3.0+在序列化时将字符串属性值转换为 base64 对于 ASP.NET Core 3.0+
【发布时间】:2021-07-04 14:09:54
【问题描述】:

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

Convert string property value to base64 on serialization

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

如何修改 Chris Richardsonanswer 以使用 System.Text.Json?

【问题讨论】:

    标签: json asp.net-core serialization base64 system.text.json


    【解决方案1】:

    创建以下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&lt;T&gt;.HandleNull 以返回 true 并根据 Read()Write() 的要求抛出异常(仅限 .NET 5 及更高版本)。

    演示小提琴here.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-28
      • 1970-01-01
      • 1970-01-01
      • 2014-12-22
      相关资源
      最近更新 更多