protobuf-net 是否支持可为 null 的类型?
是否可以在 protobuf-net 中生成可为 null 的成员?
message ProtoBuf1 {
optional Int32? databit = 1;
optional Nullable<bool> databool = 2;
}
Is it possible to generate nullable members in protobuf-net?
message ProtoBuf1 {
optional Int32? databit = 1;
optional Nullable<bool> databool = 2;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
是的,但如果您从 .proto 进行代码生成,默认情况下它不会生成它们。
如果这只是 C#,当然,您不需要需要 .proto - 只是:
如果您使用 .proto,您可以考虑复制和编辑
csharp.xslt
以适合您的首选布局。Yes, but it doesn't generate them by default if you are doing codegen from .proto.
If this is just C#, of course, you don't need a .proto - just:
If you are working from .proto, you could consider copying and editing
csharp.xslt
to suit your preferred layout.是我在使用 Google 的 Protobuf .NET API 时针对可空类型的解决方案,该 API 需要 Protocol Buffers 版本 3。(请注意,这不是使用 Marc Gravell 的 protobuf-net,因此这不是所提问题的准确答案。)
这 >NullableInt32.proto:
在
NullableInt32Extensions.cs
中:此模式可用于任何 Protobuf 非长度分隔标量值 -
double
、浮动
、int32
、int64
、uint32
、uint64
、sint32
、sint64
、fixed32
、fixed64
、sfixed32
、sfixed64
和布尔
。这就是这一切的运作方式。假设您有一条
Record
消息,其中包含一个NullableInt32
字段,在这个人为的示例中,它是唯一的字段。在
Record.proto
中:使用 Google 的。
protoc.exe
将其编译为 C# 后,您就可以像对待Id
属性一样对待Id
属性。 >可空最后,让我们看看如何使用不同的
Id
值通过线路传输Record
消息。Here's my solution for nullable types when using Google's Protobuf .NET API which requires Protocol Buffers version 3. (Note that this is not using Marc Gravell's protobuf-net, so this isn't an exact answer to the question asked.)
In
NullableInt32.proto
:In
NullableInt32Extensions.cs
:This pattern can be used for any of the Protobuf non-length delimited scalar values—
double
,float
,int32
,int64
,uint32
,uint64
,sint32
,sint64
,fixed32
,fixed64
,sfixed32
,sfixed64
, andbool
.Here's how all of this works. Say you have a
Record
message that has aNullableInt32
field, and in this contrived example it's the only field.In
Record.proto
:Once this is compiled to C# with Google's
protoc.exe
, you can treat theId
property almost exactly like aNullable<int>
.Finally, let's look at how our
Record
message will be transfered over the wire with different values forId
.Proto 3
导入“wrappers.proto”支持可为 null 的值:
支持类型的完整列表 - https://learn.microsoft.com/en-us/dotnet/architecture/grpc -for-wcf-developers/protobuf-data-types#nullable-types
示例:
Proto 3
Import "wrappers.proto" supports nullable values:
Full list of supported types - https://learn.microsoft.com/en-us/dotnet/architecture/grpc-for-wcf-developers/protobuf-data-types#nullable-types
Example: