在WCF中使用protobuf时,我们可以使用[DataMember]而不是[ProtoMember]吗?

时间:2017-07-17 09:03:07

标签: wcf serialization protobuf-net

我已经使用DataContract属性开展了一项服务。我们想切换到protobuf实现,但如果我们必须改变所有属性,那将是很多努力。

是否可以不使用ProtoMemberProtoContract并使用DataMemberDataContract属性来使用ProtoBuf?

感谢

1 个答案:

答案 0 :(得分:2)

不确定; protobuf-net非常满意[DataContract] / [DataMember] ,只要它仍然可以获得有效数字,它通过查找Order DataMemberAttribute属性来实现{1}}。

然而,有一个小问题......像svcutil 这样的工具不保证实际数字 - 只是订单。这可能会使您确保双方的相同数字存在问题。此外,svcutil往往会启动,而不是一个 - 而零不是protobuf的有效字段编号。如果你得到的数字都是一个一个,那么你可以通过在一个带有修正的单独文件中添加partial class来调整它,例如:

[ProtoContract(DataMemberOffset = 1)]
partial class Whatever { }

但是,如果数字现在遍布(因为它们最初不是顺序的),那么您可能希望 使用多个{{1}告诉它如何映射每个属性(记住你可以使用[ProtoPartialMember(...)]而不是硬编码成员名称):

nameof

或只是分享原始类型定义,这可能更容易。