Теоретически он должен просто работать нормально - bcl.proto - совершенно нормальная схема .proto - однако типы в bcl.proto по сути описывают, как я взламывал типы .NETв протобуф.Там, где это возможно, я бы рекомендовал избегать этого, когда это возможно - например, DateTime
и TimeSpan
в bcl.proto работают , но работать с ними невероятно неудобно, если вы не в .NET, а protobuf-net также позволяет использовать типы Google, которые были добавлены позже: Duration
и Timestamp
.Причина, по которой protobuf-net не использует их по умолчанию, заключается в том, что Google добавил их намного позже , чем поддержка protobuf-net.Чтобы использовать эту опцию (на тех типах, где она работает, что ограничено): используйте:
[ProtoMember(n, DataFormat = DataFormat.WellKnown)]
в свойстве / поле.GetProto
/ GetSchema
автоматически выдаст правильные операторы import
, соответствующие генерируемой вами схеме.
Однако в случае Guid
и decimal
я бы сказал, чтоварианты менее понятны.Для Guid
я бы соблазнился использовать string
, если это возможно - реальность такова, что у направляющих в представлении бинарное столько разночтений, что использование простого string
является наиболее прагматичным вариантом,И decimal
является очень недружественным для платформ, отличных от .NET: если возможно, рассмотрите возможность использования double
- или, если вам нужно избегать с плавающей запятой: либо используйте фиксированную точку с помощью масштабируемого вручную целого числа, либоеще раз: используйте string
.