限制protobuf-net继承“树”

时间:2011-10-03 20:54:07

标签: c# .net inheritance protocol-buffers protobuf-net

继续我的追求,以自己的意愿弯曲protobuf-net ..

关于如何动态添加子类,我已经看到了一些关于SO的问题 使序列化程序能够编码子类..,如thisthis

我的情况有点不同,我有一个基类可能会在后期绑定的代码中被细分,我想序列化作为BASE类,并完全忽略子类的字段/属性。

我需要这个的原因是,稍后,当我反序列化数据时,子类的代码将不可用,因此甚至不可能构建子类。

有没有办法限制/禁止子类序列化?

在我的情况下,我有一个List,其中列表中的一些项目是DerivedClass。

我想找到一种方法让protobuf-net将所有内容序列化为BaseClass并反序列化为BaseClass ......

我已经尝试过窥探代码,但没有找到太有用的东西。

1 个答案:

答案 0 :(得分:2)

通常,库非常特别关注发现派生类 - 并且它们与基类的处理方式不同。唯一的当前异常是代理类,特别是Entity Framework和NHibernate。对于整洁的解决方案,添加某种“忽略子类”开关似乎很实用。但是虽然不存在,但非常懒惰的(和hacky)方法将使用NHibernate的现有处理作弊,例如:

namespace NHibernate.Proxy {
    interface INHibernateProxy {}
}
...
public class SomeDerivedType : BaseType, INHibernateProxy {}

然后会根据BaseType自动序列化。不过,它确实有一种微弱的作弊行为。