我已经使用DataContract
属性开展了一项服务。我们想切换到protobuf实现,但如果我们必须改变所有属性,那将是很多努力。
是否可以不使用ProtoMember
和ProtoContract
并使用DataMember
和DataContract
属性来使用ProtoBuf?
感谢
答案 0 :(得分:2)
不确定; protobuf-net非常满意[DataContract]
/ [DataMember]
,只要它仍然可以获得有效数字,它通过查找Order
DataMemberAttribute
属性来实现{1}}。
然而,有一个小问题......像svcutil
这样的工具不保证实际数字 - 只是订单。这可能会使您确保双方的相同数字存在问题。此外,svcutil
往往会启动零,而不是一个 - 而零不是protobuf的有效字段编号。如果你得到的数字都是一个一个,那么你可以通过在一个带有修正的单独文件中添加partial class
来调整它,例如:
[ProtoContract(DataMemberOffset = 1)]
partial class Whatever { }
但是,如果数字现在遍布(因为它们最初不是顺序的),那么您可能希望 使用多个{{1}告诉它如何映射每个属性(记住你可以使用[ProtoPartialMember(...)]
而不是硬编码成员名称):
nameof
或只是分享原始类型定义,这可能更容易。