我有以下课程:
public class A
{
public Options Options
{
get { return mOptions; }
set { mOptions = new Options(value); }
}
}
是否有可能在序列化过程之前加密Options
的值(首先将其编码为base64然后加密它)?
但是,我不想更改Options
成员的访问修饰符。
答案 0 :(得分:2)
Protobuf.Net可以在序列化/反序列化回调之前/之后进行处理。 您可以使用它们来更改或初始化字段。
例如,您可以使用以下代码执行所需操作:
[ProtoContract]
public class A
{
[ProtoMember(1)]
private string m_OptionsEncrypted;
private Options mOptions;
public Options Options
{
get { return mOptions; }
set { mOptions = new Options(value); }
}
[ProtoBeforeSerialization]
private void OnSerializing()
{
m_OptionsEncrypted = Encrypt(mOptions);
}
[ProtoAfterDeserialization]
private void OnDeserialized()
{
mOptions = Decrypt(m_OptionsEncrypted);
}
};
请注意,mOptions
字段没有ProtoMember
属性。这允许我们仅序列化/反序列化m_OptionsEncrypted
字段,并在相应的回调中将其转换为Options
类。