前面介紹了 Protobuf 的基本純量型別後,接著探討如何運用更複雜的結構來定義
的,如: 巢狀、陣列(repeated)、Map、Oneof、自訂選項、跨檔案...等
檔案的 gStub Classes 設定成 None,代表單純產生 Partial Class
syntax = "v3";
option csharp_namespace = "MyGrpc.Shares";
package MyGrpc;
message OuterMessage {
string id = 1;
// 在 OuterMessage 內部定義 NestedMessage
message NestedMessage {
string content = 1;
int32 status_code = 2;
}
// 使用巢狀訊息作為欄位型別
NestedMessage payload = 2;
}
OrderService.cs
使用
public class OrderService
{
public void Order()
{
OuterMessage outer = new OuterMessage()
{
Id = "Order-1",
// 巢狀的類型都會被定義在 Types 內
Payload = new OuterMessage.Types.NestedMessage()
{
Content = Guid.NewGuid().ToString(),
StatusCode = 200
}
};
}
}