C# 可以通过协议缓冲区发送空类型吗?
包含以下文本: 包装类型字段 proto3中的大多数已知类型不影响代码生成, 但是包装器类型(StringWrapper、Int32Wrapper等)改变了 属性的类型和行为 与C#值类型对应的所有包装类型 (C# 可以通过协议缓冲区发送空类型吗?,c#,protocol-buffers,C#,Protocol Buffers,包含以下文本: 包装类型字段 proto3中的大多数已知类型不影响代码生成, 但是包装器类型(StringWrapper、Int32Wrapper等)改变了 属性的类型和行为 与C#值类型对应的所有包装类型 (Int32Wrapper、DoubleWrapper、BoolWrapper等)被映射到 Nullable其中T是相应的不可为空类型。对于 例如,类型为DoubleValue的字段会产生类型为的C#属性 Nullable 类型为StringWrapper或byteswapper的字段将生成
Int32Wrapper
、DoubleWrapper
、BoolWrapper
等)被映射到
Nullable
其中T
是相应的不可为空类型。对于
例如,类型为DoubleValue
的字段会产生类型为的C#属性
Nullable
类型为StringWrapper
或byteswapper
的字段将生成C#属性
正在生成类型为string
和ByteString
,但具有默认值
null
的值,并允许将null
设置为属性值
对于所有包装类型,重复包装中不允许使用空值
字段,但允许作为映射项的值
当尝试从.proto
文件生成.cs
文件时,如果尝试在.proto
文件中将字段声明为Int32Wrapper
,protoc.exe会抛出一个关于Int32Wrapper
不存在的错误
syntax ="proto3";
package prototest;
import "MessageIdentifier.proto";
message TestMessage {
string messageTest = 1;
fixed64 messageTimestampTicks = 2;
uint32 sequenceNumber = 3;
MessageUniqueID uniqueID = 4;
Int32Wrapper nullableInt = 5;
}
这里似乎缺少了一些额外的步骤,有人知道如何启用这些类型吗?
您需要导入google/protobuf/wrappers.proto才能工作
syntax ="proto3";
package prototest;
import "MessageIdentifier.proto";
import "google/protobuf/wrappers.proto";
message TestMessage {
string messageTest = 1;
fixed64 messageTimestampTicks = 2;
uint32 sequenceNumber = 3;
MessageUniqueID uniqueID = 4;
google.protobuf.Int32Value nullableInt = 5;
}
然后可以将其用作int,例如nullableInt.HasValue和nullableInt.Value我将尝试改进Nick的答案,因为这对我没有帮助。 grpc编译器声称他没有关于
google.protobuf.Int32Wrapper
类型的信息。我发现它实际上被称为google.protobuf.Int32Value
(),尽管谷歌实际上称它为Int32Wrapper
。
因此,帮助我的代码如下:
。。。
导入“google/protobuf/wrappers.proto”;
...
消息测试消息{
...
google.protobuf.Int32Value nullableInt=5;
}
其他链接:
- C#lib源代码-
- C#文件-