Skip to content

NJMrLi/CSharpInterfaceToProtoFile

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 

Repository files navigation

CSharpInterfaceToProtoFile

使用编写的C#接口文件,生成Grpc需要的Proto文件

1.编译生成一个nuget包

2.编写一个用于生成Proto文件的控制台项目,然后在里面编写对于的C#Interface代码 (老代码直接在原项目中增加一个控制台即可)

3.在控制台项目中引入刚刚生成的nuget包

4.在Program中编写如下代码,其中IXXXService是我们需要转换的代码

class Program
{
    static void Main(string[] args)
    {
        var generator = new GenerateProto();

        var file = generator.GenerateProtoFile(typeof(IXXXService));

        Console.WriteLine(file);

        Console.ReadKey();

    }
}

5.运行程序,会在根目录生成一个 XXX.proto文件

syntax ="proto3";

option csharp_namespace = "GenerateGrpcProto";

package XXX;

service XXX{
	rpc GetDataById (GetDataByIdInput) returns (GetDataByIdOutput);
	rpc SetDataById_Data (SetDataById_Data_Input) returns (SetDataById_Data_Output);
}

message SetDataById_Data_Output{
	string result = 1;
}

message SetDataById_Data_Input{
	int64 id = 1;
	TestData data = 2;
}


message TestData{
}


message GetDataByIdOutput{
	TestData result = 1;
}

message GetDataByIdInput{
	int64 id = 1;
}

规则:

1.会给方法自动生成对应的message,包括0个参数的以及返回值为void的方法,例如

C#

void GetSomething();
void GetSomething(long Id);

生成的rpc方法

rpc GetSomething (GetSomethingInput) returns (GetSomethingOutput);
rpc GetSomethingById (GetSomethingByIdInput) returns (GetSomethingByIdOutput);

生成的message

message GetSomethingByIdOutput{
}

message GetSomethingByIdInput{
        int64 id = 1;
}

message GetSomethingOutput{
}

message GetSomethingInput{
}

2.由于proto文件中不能有同名的方法名,所以如果遇到重载的时候,会变掉生成的方法名称,例如 C#接口文件中定义方法 ①无参数 会在方法名后 加上 Input ②一个参数 会在方法名后 加上 By参数名Input ③多个参数 会在方法名后 加上 By参数1_参数2_Input

TestData GetData();
TestData GetData(long Id);
TestData GetData(long Id,string name);

生成的Proto文件

rpc GetData (GetDataInput) returns (GetDataOutput);
rpc GetDataById (GetDataByIdInput) returns (GetDataByIdOutput);
rpc GetDataById_Name (GetDataById_Name_Input) returns (GetDataById_Name_Output);

3.目前支持类型C# int、long、数组、列表、字典

About

使用编写的C#接口文件,生成Grpc需要的Proto文件

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages