【问题标题】:make protobuf-net serialize subclasses as the base class?使 protobuf-net 将子类序列化为基类?
【发布时间】:2013-01-03 12:13:20
【问题描述】:

我正在使用 Protobuf-net(带有 Servicestack)。我有一种情况,即使特定实例是继承者,我也希望将某个类序列化为那个确切的类。 Protobuf-net 可以做到这一点吗?我不关心继承者,也不希望将它们发送给我的客户,因为他们没有合适的东西来反序列化它们。

【问题讨论】:

    标签: c# serialization protobuf-net


    【解决方案1】:

    目前,答案是“不”。烦人的是,它有大部分代码来支持它,因为它适用于实体框架、NHibernate 等的代理类型(它们被实现为应被视为基本类型的子类型),但我还没有将此作为可选的“忽略子类型”功能公开。从理论上讲,这应该是一种接线的情况。如果您的继承模型只是一个额外的级别(即合约类型是Foo,并且您给它一个SuperFoo,其中SuperFoo : Foo),那么就有可能欺骗它通过伪装成 NHibernate(它检查接口/命名空间 names - 它实际上并没有引用 NHibernate 本身,以减少依赖关系):

    namespace NHibernate.Proxy.DynamicProxy
    {
        interface IProxy { }
    }
    ...
    class SuperFoo : Foo, IProxy {...}
    

    但是!我应该补充:

    • 考虑到这一点,我想更直接/正式地支持
    • 上述方法会稍微减慢速度,因为它通过反射检查这一点:要做到这一点正确,我想让这个“直接”(常规类型检查 ets;不运行时反射)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多