[gRPC] C# 프로토콜 버퍼 사용하기

728x90
반응형

 

 

protobuf-net 이란?

protobuf-net은 .NET 코드용 계약 기반 직렬 변환기로, Google에서 설계한 "프로토콜 버퍼" 직렬화 형식으로 데이터를 작성합니다. 그러나 API는 Google과 매우 다르며 일반적인 .NET 패턴을 따릅니다. (사용 면에서 XmlSerializer, DataContractSerializer, 등) 표준 유형을 작성하고 특성을 사용할 수 있는 대부분의 .NET 언어에서 작동해야 합니다.

.proto 파일을 생성 하지 않아도 됩니다.

 

 

 

 

 

NuGet  패키지 다운로드

protobuf-net 은 Nuget Package 관리자를 통해서 다운로드 받을 수 있습니다. 

제가 받았을때 버전은 3.1.17 이였네요.

 

 

 

 

사용방법

[ProtoContract]
public class Account
{
    [ProtoMember(1)]
    public string UserID { get; set; }
    [ProtoMember(2)]
    public int Age { get; set; }
    public int Num { get; set; }
}

사용방법은 크게 어렵지 않았습니다.  사용하려는 프로토콜 Class 에 ProtoContract 라는 Attribute를 선언해주고, 

각각의 Property에 ProtoMember Attribute를 추가적으로 선언해주면 됩니다. 

인덱스는 1 번 부터 시작합니다. 

 

 

 

static void Main(string[] args)
{
    Account account = new Account
    {
        UserID = "Martin",
        Age = 1337, 
        Num = 1
    };



    //  serialize
    MemoryStream serialize = new MemoryStream();
    ProtoBuf.Serializer.Serialize<Account>(serialize, account);
    byte[] byteData = serialize.ToArray();
    Console.WriteLine($"Serialize : {BitConverter.ToString(byteData)}");
    //Console.WriteLine($"Json : {}")


    //  deserialize
    MemoryStream deserialize = new MemoryStream(byteData);
    Account result = ProtoBuf.Serializer.Deserialize<Account>(deserialize);
    Console.WriteLine($"DeSerialize : {result.UserID}, {result.Age}, {result.Num}");


    Console.ReadLine();
}

간략하게 Serialize, Deserialize 하는 방법입니다. 

protobuf-net 을 사용해서 C# 내에서는 사용방법이 간략하네요. 

 

 

 

 

참조

https://reqres.tistory.com/6

https://dotnetcoretutorials.com/2022/01/13/protobuf-in-c-net-part-2-serializing-deserializing/

 

 

 

 

 

 

 

END


 

 

 

 

728x90