Protobuf .NET Post反序列化处理程序

Rya*_*yan 7 c# protobuf-net

有没有办法处理一个事件或回调刚刚被Protobuf反序列化的对象,而不必明确地从反序列化对象中调用该方法?

例如,假设我有以下课程:

[ProtoContract]
public class Customer
{
    [ProtoMember(1)]
    public string FirstName { get; set; }

    [ProtoMember(2)]
    public string MiddleName { get; set; }

    [ProtoMember(3)]
    public string LastName { get; set; }

    [ProtoMember(4)]
    public Dictionary<int, string> Addresses { get; set; }

    public Customer()
    {
        //Subscibe to a Protobuf deserialization complete event?
    }

    public void ValidateAddresses()
    {
        //Some routine to validate addresses
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有办法调用"ValidateAddresses"而不必从反序列化的代码块中的反序列化对象中显式调用它?在构造函数中调用它是没有价值的,因为Protobuf还没有应用序列化的值,所以有一种方法可以知道它何时完成应用值.我希望有一种方法可以实现这一点,以消除在对象被使用的任何地方重构后反序列化调用的需要.

我有一些想法,但我想我会先发布这个问题,然后再向前证明这些问题,以防万一有人有一个我还没有看到的更好的(这很可能).提前致谢.

Mar*_*ell 16

是.Protobuf-net支持标准的序列化回调.通过WCF/DataContractSerializer属性或protobuf-net特定属性.具体来说,您可以使用[OnDeserializedAttribute]或标记方法[ProtoAfterDeserialization],并在反序列化结束时调用它.可以在序列化之前,序列化之后,反序列化之前和反序列化之后调用方法.

WCF需要这些方法的特定签名,但protobuf-net不那么繁琐:它可以使用WCF签名,但也允许无参数方法,或通常参数的任意组合,或protobuf-net自己的序列化上下文.