使用protobuf-net对基类属性进行序列化

时间:2013-01-02 16:47:01

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

我们的实体模型中有一些复杂的类层次结构。我们为所有实体都有一个基类BaseEntity,然后是从BaseEntity派生的一些“二级”类,从任何“二级”类派生的一些“三级”类,以及很多“级别” 4“课程,来自任何”3级“课程。这意味着,我们有这样的事情:

  • BaseEntity
    • DerivedEntity_1
      • DerivedEntity_1_1
        • DerivedEntity_1_1_1
        • DerivedEntity_1_1_2
        • DerivedEntity_1_1_3
      • DerivedEntity_1_2
        • DerivedEntity_1_2_1
        • DerivedEntity_1_2_2
    • DerivedEntity_2
      • DerivedEntity_2_1
        • DerivedEntity_2_1_1
      • DerivedEntity_2_2
        • DerivedEntity_2_2_1
        • DerivedEntity_2_2_2
        • DerivedEntity_2_2_3
        • DerivedEntity_2_2_4

依此类推......

现在,当使用protobuf-net通过WCF传输这些类型的实例时,只传输“4级”类的属性 - 基类中的所有属性都将丢失!

从其他几个StackOverflow线程(hereherehere)中,我读到这是默认行为,您有两个选项可以解决它:

  1. 在基类上使用[ProtoInclude]属性。
  2. 使用TypeModelAddSubType()
  3. 在运行时配置继承

    但是,由于我们有很多派生类,因此这些选项在我们的场景中都不可行。选项1意味着1级基类的数百个属性。选项2意味着大量调用AddSubType()

    还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

最终,它需要了解它应该如何存储数据,以便您可以将其恢复。它不能只是猜测...所以:唯一可靠的方法是在某处定义模型。但是,这不一定是原始代码:例如,它可能存储在您在运行时包含和处理(通过AddSubType)的外部文件中。