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

时间:2017-09-04 07:58:26

标签: c# json serialization json.net base64

有人知道在序列化对象时是否可以将类中的某些值转换为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读回到类中的字符串属性。

1 个答案:

答案 0 :(得分:4)

根据评论的建议,我最终做的是创建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))]

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

$translated = $this->get('translator')->trans('Symfony is great');