The Proto3 C# 参考 https://developers.google.com/protocol-buffers/docs/reference/csharp-generated#wrapper_types包含以下文本:
包装类型字段
proto3中大多数知名类型不影响代码生成,
但包装类型(StringWrapper、Int32Wrapper 等)改变了
属性的类型和行为。
与 C# 值类型相对应的所有包装类型
(Int32Wrapper
, DoubleWrapper
, BoolWrapper
等)被映射到Nullable<T>
where T
是相应的不可空类型。为了
例如,类型字段DoubleValue
结果为类型的 C# 属性Nullable<double>
.
类型字段StringWrapper
or BytesWrapper
结果为 C# 属性
类型的string
and ByteString
正在生成,但带有默认值
的价值null
,并允许null
被设置为属性值。
对于所有包装器类型,重复的值中不允许出现空值
字段,但允许作为映射条目的值。
当尝试生成一个.cs
文件来自.proto
文件,如果我尝试将字段声明为Int32Wrapper
in the .proto
文件,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;
}
这里似乎缺少一些额外的步骤,有人知道如何启用这些类型吗?
我会尽力改进尼克的答案,因为它对我没有帮助。
grpc编译器声称他没有任何信息google.protobuf.Int32Wrapper
类型。我发现它实际上被称为google.protobuf.Int32Value https://github.com/protocolbuffers/protobuf/blob/48234f5f012582843bb476ee3afef36cda94cb66/src/google/protobuf/wrappers.proto#L88,虽然谷歌称它为Int32Wrapper
在文档中。
所以对我有帮助的代码如下:
...
import "google/protobuf/wrappers.proto";
...
message TestMessage {
...
google.protobuf.Int32Value nullableInt = 5;
}
其他链接:
- C# 库源 https://github.com/protocolbuffers/protobuf/blob/48234f5f012582843bb476ee3afef36cda94cb66/csharp/src/Google.Protobuf/WellKnownTypes/Wrappers.cs#L781
- C# doc https://developers.google.com/protocol-buffers/docs/reference/csharp/class/google/protobuf/well-known-types/int32-value
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)