在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中序列化类成员

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类。