【问题标题】:Convert string property value to base64 on serialization在序列化时将字符串属性值转换为 base64
【发布时间】:2018-11-15 00:14:07
【问题描述】:

有谁知道在序列化对象时是否可以将类中的某些值转换为 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);
}

预期的输出将是:

{ "Value1": "A String", "Value2": base64encodedvalue }

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

【问题讨论】:

  • 创建自定义 JsonConverter 并标记属性。

标签: c# json serialization json.net base64


【解决方案1】:

按照 cmets 的建议,我最终所做的是创建一个 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)));
    }           
}

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

[JsonConverter(typeof(CustomBase64Converter))]

【讨论】:

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