在序列化时将字符串 属性 值转换为 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.
我正在尝试在序列化为 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
覆盖为 returntrue
并根据需要从Read()
抛出异常和Write()
(仅限 .NET 5 及更高版本)。
演示 fiddle here.