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