序列化时将字符串属性值转换为base64

Chr*_*son 2 c# base64 serialization json json.net

有人知道序列化对象时是否有可能将类中的某些值转换为Base64吗?我需要一种标记属性的方法,以指示它需要导出为Base64。例如:

using Newtonsoft.Json;

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

    [ExportThisValueAsBase64]
    public string Value2 { get; set; }
}

public void WriteJSON(MyFoo myFoo) {
    var contentsToWriteToFile = SerializeObject(myFoo, Formatting.Indented);
}
Run Code Online (Sandbox Code Playgroud)

预期的输出将是:

{ "Value1": "A String", "Value2": base64encodedvalue }
Run Code Online (Sandbox Code Playgroud)

我还需要一种将值从base64读回到类中的string属性的方法。

Chr*_*son 5

正如评论中所建议的,我最后所做的就是创建一个 JsonConverter

internal class CustomBase64Converter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return true;
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {                
        return System.Text.Encoding.UTF8.GetString((Convert.FromBase64String((string)reader.Value)));
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {                
        writer.WriteValue(Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes((string)value)));
    }           
}
Run Code Online (Sandbox Code Playgroud)

现在在我的任何属性上,我都可以添加标题

[JsonConverter(typeof(CustomBase64Converter))]
Run Code Online (Sandbox Code Playgroud)