ProtoInclude属性是什么意思(在protobuf-net中)在ProtoBuf-Net实现中,ProtoInclude属性是什么意思,有什么作用?一个例子将不胜感激。我在这篇文章中看到了它,但我不确定它的作用。这个例子是:[Serializable,ProtoContract,ProtoInclude(50,typeof(BeginRequest))]abstractinternalclassBaseMessage{[ProtoMember(1)]abstractpublicUInt16messageType{get;}}[Serializable,ProtoContract]内部类BeginRequest:BaseMessage{[ProtoMember(1)]publicoverrideUInt16messageType{get{return1;另外,有没有办法使用protogen工具生成这种继承?抱歉,我不是有意错过这个-唉,我什么都看不到。考虑到问题的具体情况,我假设您至少熟悉.proto;如果我错了,请纠正我。[ProtoInclude]非常类似于XmlSerializer[XmlInclude]-或DataContractSerializer[KnownType]-允许它在(反)序列化期间识别类型的子类。唯一的另一件事是它需要一个标签(数字)来标识每个子类型(必须是唯一的并且不与父类型的任何字段冲突)。重新制作原型:否;根规范(google)根本不提供继承,因此protogen(通过.proto)没有机制来表达这一点。protobuf-net提供继承支持作为扩展,但它仍然以与其他实现兼容的方式保存消息。在推送中,也许我可以通过google规范中的新扩展属性添加protogen支持,但我还没有这样做。所以;看看这个例子;表达BaseMessage和BeginRequest之间的继承关系;是否使用:Serialize(...)Serialize(...)序列化(可能是BeginRequest)。在引擎盖下,出于兼容性目的(使用宽协议缓冲区规范),这类似于编写类似的东西(原谅任何错误,我的.proto是生锈的):messageBaseMessage{optionalBeginRequestbeginRequest=50;可选uint32消息类型=1;}messageBeginRequest{}(覆盖可能不应该指定[ProtoMember],顺便说一句。通常,它会按标签升序写入字段,但为了高效反序列化,引擎会选择写入子类数据(规范明确允许)-即它会写类似的东西(你必须想象二进制...):[tag50,string][lengthofsub-message][bodyofsub-message][tag1,int][value](Inthiscase,sub-messagebodyisempty)这样就覆盖了吗以上就是C#学习教程的全部内容:ProtoInclude属性是什么意思(在protobuf-net中),如果对大家有帮助的话是有用,需要了解更多C#学习教程,希望大家多多关注删除,如有转载请注明出处:
