c# - 使用 protobuf-net 序列化基类属性

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

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

  • 基础实体
    • 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() 在运行时配置继承。

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

还有其他选择吗?

最佳答案

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

关于c# - 使用 protobuf-net 序列化基类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14125794/

相关文章:

c# - 将数组拆分为特定长度的子数组

c# - MVC 在 C# 中连接多个 2 个表并根据结果填充列表

c# - .NET Core 从 appsettings.json 获取连接字符串

c# - 如果默认字符串为空,为什么我不能使用 String.Contains()?

wcf - 使用 WCF 的 StructureMap?

javascript - 将 PHP cURL 转换为 JavaScript(连接到 WCF 服务)

c# - wcf restful服务配置错误

c# - 在列表或数组中搜索现有字符串

c# - 在 C# 中对队列进行排序

.net - 定位托管 .NET 应用程序中的 native 内存泄漏,DebugDiag 缺少堆栈跟踪