使protobuf-net序列化子类作为基类

本文关键字:基类 子类 protobuf-net 序列化 | 更新日期: 2023-09-27 17:54:46

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

使protobuf-net序列化子类作为基类

目前,这个问题的答案是"不"。令人恼火的是,它有大部分的代码来支持这一点,因为它与代理类型一起工作,如实体框架,NHibernate等(这些都是作为子类型实现的,应该被视为基本类型),但我还没有将其暴露为可选的"忽略子类型"功能。从理论上讲,这应该是一个布线的问题。如果你的继承模型只有一个额外的级别(即合同类型是Foo,你给它一个SuperFoo,其中SuperFoo : Foo),那么有可能通过假装是NHibernate来欺骗它(它检查接口/命名空间名称 -它实际上不引用NHibernate本身,以减少依赖):

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

!我应该加上:

  • 经过考虑,我想更直接/正式地支持
  • 上面的方法会稍微减慢速度,因为它通过反射来检查:为了正确地,我想让它"直接"(常规类型检查);运行时无反射)