2

我们的实体模型中有一个有些复杂的类层次结构。我们有一个BaseEntity所有实体的基类,然后一些“2 级”类派生自BaseEntity,一些“3 级”类派生自任何“2 级”类,还有许多“4 级”类派生自任何“3 级”类“ 班级。这意味着,我们有这样的东西:

  • 基础实体
    • 派生实体_1
      • 派生实体_1_1
        • 派生实体_1_1_1
        • 派生实体_1_1_2
        • 派生实体_1_1_3
      • 派生实体_1_2
        • 派生实体_1_2_1
        • 派生实体_1_2_2
    • 派生实体_2
      • 派生实体_2_1
        • 派生实体_2_1_1
      • 派生实体_2_2
        • 派生实体_2_2_1
        • 派生实体_2_2_2
        • 派生实体_2_2_3
        • 派生实体_2_2_4

等等等等...

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

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

  1. 使用[ProtoInclude]基类的属性。
  2. 在运行时使用TypeModel和配置继承AddSubType()

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

还有其他选择吗?

4

1 回答 1

0

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

于 2013-01-02T17:35:59.160 回答