在protobuf中序列化类成员
本文关键字:成员 序列化 protobuf | 更新日期: 2023-09-27 18:17:29
我有以下类:
public class A
{
public Options Options
{
get { return mOptions; }
set { mOptions = new Options(value); }
}
}
是否可以在序列化过程之前对Options
的值进行加密(先将其编码为base64然后加密)?但是我不想改变Options
成员的访问修饰符
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
类。