的Proto3 C# Reference包含以下文本:可以通過協議緩衝區發送可空類型嗎?
包裝類型字段
大多數proto3著名的類型不影響代碼生成, 但包裝類型(StringWrapper,Int32Wrapper等)更改 類型和屬性的行爲。
所有對應於C#的值類型 (
Int32Wrapper
,DoubleWrapper
,BoolWrapper
等)的包裝類型都映射到Nullable<T>
其中T
是相應的非空類型。例如,對於 示例,類型DoubleValue
的字段會生成類型爲Nullable<double>
的C#屬性。產生
StringWrapper
型或BytesWrapper
結果在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;
}
看來還有一些額外的步驟在這裏丟失,有誰知道如何啓用這些類型?
聲明一個領域是模糊的,你定義原型文件並生成C#類或C#類定義的字段,並試圖產生一個原型?一個簡單的例子可能有助於澄清。 – Guvante
@Guvante我正嘗試使用protoc.exe從.proto文件生成.cs文件。我編輯了我的問題來添加更多的細節和例子.proto文件。 – pquest
奇怪我無法找到該網頁外約Int32Wrapper任何相關的文檔和測試案例的protobuf:https://github.com/google/protobuf/blob/master/src/google/protobuf/util/internal/testdata/ wrappers.proto – Guvante