c# - Protobuf .NET 后反序列化处理程序

标签 c# protobuf-net

有没有一种方法可以处理事件或回调刚刚被 Protobuf 反序列化的对象,而不必显式调用反序列化对象的方法?

例如,假设我有以下类(class):

[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
    }
}

是否有一种方法可以调用“ValidateAddresses”而不必从反序列化代码块中的反序列化对象显式调用它?在构造函数中调用它是没有值(value)的,因为 Protobuf 尚未应用序列化值,因此最好有一种方法来知道它何时完成应用值。我希望有一种方法可以实现这一点,以便消除在使用对象的任何地方重构反序列化后调用的需要。

我有一些想法,但我想我会在开始验证它们之前发布问题,以防有人有更好的想法但我还没有看到(这很有可能)。提前致谢。

最佳答案

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

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

关于c# - Protobuf .NET 后反序列化处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14838379/

相关文章:

c# - 使用 protobuf 序列化 ConcurrentQueue

c# - NetworkComms 自定义对象错误 - "objectToSerialize must implement IExplicitlySerialize"

c# - 在 Protobuf-net 中序列化一个抽象列表

c# - C#中的 `Fields`和 `Properties`有什么区别?

c# - WPF 中是否有类似 Winforms.Show ( IWin32Window 所有者)的方法?

c# - 使用属性路由时如何获取 Mvc 5 Controller 的 ActionDescriptor?

c# - .NET 中每种类型消耗多少字节的内存(32 位环境)?

c# - Protobuf-net 似乎是对值类型进行包装。事实是这样吗?

protocol-buffers - 通过 AWS SQS 传输 ProtoBuf-net 消息时无效的二进制字符

c# - Response.WriteFile() 奇怪字符问题