[c#] C#에서의 protobuf로의 직렬화

Protobuf(Protocol Buffers)는 구조화된 데이터를 직렬화하고 직렬화 된 데이터를 구조화 할 수 있는 이식성이 뛰어난 메커니즘입니다. 이 기술은 프로토콜을 위한 이식성이 뛰어난 버전을 구축할 때 자주 사용됩니다. C#에서 Protobuf로 직렬화하는 방법을 알아봅시다.

Protobuf 라이브러리 설치

먼저, C#에서 Protobuf를 사용하기 위해 Google.Protobuf 패키지를 설치해야 합니다.

dotnet add package Google.Protobuf

C#에서 Protobuf를 사용하여 직렬화

Protobuf를 사용하여 C# 객체를 직렬화하기 위해서는 해당 객체에 대한 프로토 파일을 정의해야 합니다. 예를 들어, 다음은 간단한 프로토 파일의 예시입니다.

syntax = "proto3";

message Person {
  string name = 1;
  int32 id = 2;
  repeated string email = 3;
}

위의 프로토 파일을 사용하여 C# 클래스를 생성하고 Protobuf의 Serializer 클래스를 사용하여 해당 클래스의 객체를 직렬화 할 수 있습니다.

using Google.Protobuf;
using System;
using System.IO;

// 위에서 정의한 프로토 파일에 따라 생성된 C# 클래스
Person person = new Person
{
    Name = "John Doe",
    Id = 12345,
    Email = { "jdoe@example.com" }
};

// Serialize the person object to a byte array
byte[] data;
using (MemoryStream stream = new MemoryStream())
{
    person.WriteTo(stream);
    data = stream.ToArray();
}

위의 코드에서 Person 클래스는 프로토 파일에 정의된 구조와 일치하는 C# 클래스입니다. Person 객체를 Serializer 클래스의 WriteTo 메서드를 사용하여 MemoryStream에 직렬화 한 다음, byte 배열로 변환하여 데이터를 얻을 수 있습니다.

C#에서 Protobuf를 사용하여 직렬화 해제

C#에서 Protobuf를 사용하여 직렬화된 데이터를 해제하기 위해서는 ParseFrom 메서드를 사용할 수 있습니다.

// Deserialize the byte array back to a person object
Person deserializedPerson = Person.Parser.ParseFrom(data);

ParseFrom 메서드는 직렬화된 데이터를 받아 해당 데이터를 포함하는 새로운 객체를 만들어 반환합니다.

이제 C#에서 Protobuf를 사용하여 객체를 직렬화하고 직렬화 된 데이터를 객체로 다시 해제하는 방법에 대한 이해를 얻었습니다. 이를 통해 C#에서 Protobuf를 효율적으로 활용할 수 있을 것입니다.

이 문서는 Google Protobuf의 공식 문서에서 많은 영감을 받았습니다.

참고 자료