在protobuf中序列化一个类成员

时间:2014-08-11 07:28:03

标签: c# protocol-buffers protobuf-net

我有以下课程:

public class A
{
    public Options Options 
    {
        get { return mOptions; }
        set { mOptions = new Options(value); }
    }
}

是否有可能在序列化过程之前加密Options的值(首先将其编码为base64然后加密它)? 但是,我不想更改Options成员的访问修饰符。

1 个答案:

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