Grpc对象转proto代码工具
尽管Grpc.Tools能够将proto文件主动生成代理类,然而proto文件得手敲,还容易出错,如果接口比较复杂,定义比拟多,这就很头疼了
为了解决这个问题Class2Proto诞生了,应用规范C#对象转换成proto文件,不论是新写的接口,还是老的API接口转Grpc,都没问题
- <u>装置nuget包:CRL.Class2Proto</u>
- <u>using CRL.Class2Proto;</u>
定义标准接口代码
[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;}