Grpc對象轉proto代碼工具

Grpc對象轉proto代碼工具

雖然Grpc.Tools可以將proto文件自動生成代理類,但是proto文件得手敲,還容易出錯,如果接口比較複雜,定義比較多,這就很頭疼了

爲了解決這個問題Class2Proto誕生了,使用標準C#對象轉換成proto文件,不管是新寫的接口,還是老的API接口轉Grpc,都沒問題

  1. 安裝nuget包:CRL.Class2Proto
  2. using CRL.Class2Proto;

定義標準接口代碼

[ProtoServiceAttribute("protoTest", "ClassTestAction")]
public interface ClassTestAction
{
    ClassTest getObj(TestObj a);
    //ClassTest getObj2(TestObj a);
    Request getObj3(TestObj2<Request> a);
    TestObj2<List<Request>> getObj4(TestObj2<List<Request>> a);
}

運行轉換方法生成proto文件

var convertInfo = ClassConvert.Convert(System.Reflection.Assembly.GetAssembly(typeof(ClassTest)));
convertInfo.ForEach(b => b.CreateCode());

程序目錄Protos成生了protoTest.proto文件

syntax = "proto3";
option csharp_namespace = "gRPC.gRpcClient.protoTest";
package protoTest;
service ClassTestAction {
    rpc getObj(TestObjDTO) returns (ClassTestDTO);
    rpc getObj3(TestObj2_RequestDTO) returns (RequestDTO);
    rpc getObj4(TestObj2_l_RequestDTO) returns (TestObj2_l_RequestDTO);
}
message StatusDTO {
    ok = 0;
    fail = 1;
}
message TestObjDTO {
    string Id = 1;
}
message ClassTestDTO {
    string Name = 1;
    int32 nullableValue = 2;
    StatusDTO Status = 3;
    TestObjDTO Data = 4;
    repeated string Name2 = 5;
    repeated TestObjDTO Data2 = 6;
    map<string, TestObjDTO> Data3 = 7;
    string time = 8;
    double decimalValue = 9;
    string Id = 10;
}
message RequestDTO {
}
message TestObj2_RequestDTO {
    string Id = 1;
    RequestDTO data = 2;
}
message TestObj2_l_RequestDTO {
    string Id = 1;
    repeated RequestDTO data = 2;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章