ProtoBuf-net 中的 [ProtoInclude(20 ,typeof(child))] 如何向上扩展 class 层次结构树?

How does [ProtoInclude(20 ,typeof(child))] in ProtoBuf-net extend up the class hierarchy tree?

我有一个 class 需要具有 parent 和 grandparent 的所有属性,但我不确定如何构造这在 protobuf-net.

貌似我只能说:

public class Child : Parent {
   [ProtoMember(1)]
   int childInt;
}

[ProtoInclude(2, typeof(Child))]
public class Parent : GrandParent{
   [ProtoMember(1)]
   int parentInt;
}

[ProtoInclude(2, typeof(Parent))]
public class GrandParent {
   [ProtoMember(1)]
   int grandParentInt;
}

据我所知,当我尝试序列化 Child class 的实例时,这应该序列化所有 ProtoMember 整数成员。

这是在 protobuf-net 中进行序列化继承的正确方法吗? 马克帮帮我!

好的,这样就可以了!我进行了虚拟测试,当您只执行 Parent 的 ProtoInclude 语句时,GrandParent 的所有 ProtoMembers 都将被序列化。 这很好。

是的,这是在 protobuf-net 中处理继承的可接受方式。它肯定 有效 。在 protobuf 术语中,将实现 类似:

message GrandParent {
    int grandParentInt = 1;
    optional Parent parent = 2;
}
message Parent {
    int parentInt = 1;
    optional Child child = 2;
}
message Child {
    int childInt = 1;
}

但是,就我个人而言,我很想引入一种 DTO 类型(而不是序列化您现有的模型),它以最简单的方式简单地公开所需的数据 - 可能表示都在同一级别。