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의 공식 문서에서 많은 영감을 받았습니다.