Docs Menu
Docs Home
/ / /
C#/ .NET 드라이버
/

직렬화

이 페이지의 내용

  • 개요
  • Serializer
  • Serializer 레지스트리
  • 직렬 변환기 등록
  • 레지스트리에서 직렬 변환기에 액세스
  • 사용자 지정 직렬 변환기
  • 옵트인 인터페이스
  • IBsonIdProvider
  • IBsonDocumentSerializer
  • IBsonArraySerializer
  • 컨벤션
  • 배열 직렬화 성능 향상
  • 추가 정보

이 가이드에서는 MongoDB .NET/C# 드라이버를 사용하여 직렬화를 수행하는 방법을 배울 수 있습니다. 직렬화는 MongoDB에 저장하기 위해 C# 객체를 BSON 문서에 매핑하는 프로세스입니다.

직렬화

직렬화에 학습 보려면 Wikipedia의직렬화 문서를 참조하세요.

직렬 변환기는 C# 객체와 BSON 문서 간의 변환을 처리하는 클래스입니다. 직렬 변환기는 IBsonSerializer 인터페이스를 구현합니다. .NET/C# 드라이버에는 기본 유형, collection 유형 및 사용자 지정 클래스를 처리하기 위해 만들어진 많은 내장 직렬 변환기가 있습니다.

사용 가능한 직렬 변환기의 전체 목록은 직렬 변환기 네임스페이스 API 문서를 참조하세요.

직렬 변환기 레지스트리에는 애플리케이션 에서 사용할 수 있는 모든 등록된 직렬 변환기가 포함되어 있습니다. 대부분의 내장 직렬 변환기는 애플리케이션 스타트업 시 직렬 변환기 레지스트리에 자동으로 등록됩니다.

사용자 지정 직렬 변환기를 사용하려면 먼저 다음 예시 와 같이 직렬 변환기 레지스트리에 추가해야 합니다.

BsonSerializer.RegisterSerializer(new CustomTypeSerializer());

직렬 변환기를 등록하면 운전자 이를 사용하여 직렬 변환기에 의해 매핑된 모든 값을 직렬화합니다.

레지스트리에서 특정 직렬 변환기에 액세스 하려면 다음과 같이 BsonSerializer 클래스의 SerializerRegistry 속성 사용합니다.

var intSerializer = BsonSerializer.SerializerRegistry.GetSerializer<int>();

중요

직렬 변환기 레지스트리는 글로벌 레지스트리입니다. 즉, 단일 애플리케이션에서 여러 개의 레지스트리를 사용할 수 없습니다.

사용자 지정 직렬 변환기를 만들려면 IBsonSerializer 기본 클래스를 구현 ValueType 멤버를 설정하다 다음 Deserialize()Serialize() 메서드를 재정의합니다.

다음 코드 예시에서는 사용자 지정 BsonRegularExpression 직렬 변환기를 보여줍니다.

class CustomRegularExpressionSerializer : IBsonSerializer
{
public Type ValueType => typeof(Regex);
public object Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
var type = context.Reader.CurrentBsonType;
switch (type)
{
case BsonType.RegularExpression:
return context.Reader.ReadRegularExpression().AsRegex;
case BsonType.String:
var pattern = context.Reader.ReadString()
return new Regex(pattern);
default:
throw new NotSupportedException($"Cannot convert a {type} to a RegularExpression.");
}
}
public void Serialize(BsonSerializationContext context, BsonSerializationArgs args, object value)
{
var regex = (Regex) value;
context.Writer.WriteRegularExpression(regex);
}
}

.NET/C# 드라이버에는 직렬 변환기가 처리하는 데이터 유형에 따라 사용자 지정 직렬 변환기 클래스가 구현할 수 있는 몇 가지 선택적 인터페이스가 있습니다.

IBsonIdProvider 인터페이스는 및 메서드를 GetDocumentId() SetDocumentId() 제공하며, 직렬화하려는 객체가 이외의 _id 유형을 사용하는 경우 ObjectId 유용합니다.

IBsonDocumentSerializer 구현 인터페이스를 사용하면 드라이버가 직렬화하려는 객체의 멤버 정보에 액세스할 수 있습니다. 이를 통해 드라이버는 사용자 지정 직렬 변환기를 사용할 때 형식이 안전한 쿼리를 올바르게 구성할 수 있습니다.

IBsonArraySerializer 구현 인터페이스를 사용하면 드라이버가 배열의 개별 항목에 대한 직렬화 정보에 액세스할 수 있습니다.

규칙 팩을 사용하면 운전자 직렬화 중에 사용하는 클래스와 해당 멤버에 규칙을 정의하고 적용 할 수 있습니다. 규칙은 각 클래스를 속성으로 장식하지 않고도 C# 객체와 MongoDB 문서 간에 데이터를 매핑하는 방법을 지정합니다.

.NET/ C# 드라이버 직렬화 프로세스 사용자 지정하는 데 사용할 수 있는 내장 규칙을 제공합니다. 다음 표에서는 몇 가지 내장 규칙에 대해 설명합니다.

규칙
설명

직렬화 및 역직렬화 중에 요소 이름을 카멜 표기법으로 변환합니다.

직렬화 및 역직렬화 중에 열거형 값을 지정된 표현으로 변환합니다.

역직렬화 중에 문서 의 예비 요소를 무시할지 여부를 지정합니다.

객체 직렬 변환기를 사용하여 직렬화할 수 있는 유형을 지정합니다.

사용 가능한 규칙의 전체 목록을 보려면 API 설명서에서 규칙 클래스 참조를 확인하세요.

다음 예시 와 같이 지정된 규칙을 사용하여 ConventionPack 를 인스턴스화한 다음 ConventionRegistry.Register() 메서드에 전달하여 규칙을 등록할 수 있습니다.

var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() };
ConventionRegistry.Register("CamelCaseConvention", camelCaseConvention, t => true);

<T> 표준 C# 배열이나 BsonArray 객체와 같은 유형을 사용하는 대신 프리미티브 Memory<T> ReadOnlyMemory<T>배열을Memory<T> 및 ReadOnlyMemory 구조체로 표시하여 애플리케이션의 성능을 향상시킬 수 있습니다. 운전자 및 에 대한 빠른 직렬화 및 역직렬화 경로를 구현하여 속도를 높이고 메모리 사용량을 줄입니다.

참고

Memory<T> 또는 ReadOnlyMemory<T>에 대해서는 잘라내기 및 오버플로 검사가 지원되지 않지만, 이러한 검사는 표준 배열에 대해 구현됩니다.

다음 기본 유형을 Memory<T> 또는 ReadOnlyMemory<T> 구조체에 저장하면 이러한 성능 향상 효과를 얻을 수 있습니다.

  • bool

  • sbyte

  • byte

  • char

  • short

  • ushort

  • int

  • uint

  • long

  • ulong

  • float

  • double

  • decimal

다음 예시 MemoryReadOnlyMemory 구조체로 모델링된 배열 필드를 포함하는 Line POCO를 정의합니다.

public class Line
{
public ObjectId Id { get; set; }
public Memory<int> X { get; set; }
public ReadOnlyMemory<float> Y { get; set; }
}

다음 문서 샘플 Line 객체 MongoDB 에서 표현되는 방식을 나타냅니다.

{
"_id": ...,
"X": [ 1, 2, 3, 4, 5 ],
"Y": [ 1, 1.409999966621399, 1.7300000190734863, 2, 2.240000009536743 ]
}

모델 벡터

Atlas Vector Search 큰 숫자 배열을 만들고 쿼리하는 작업이 포함됩니다. 애플리케이션 에서 Atlas Vector Search 사용하는 경우 MemoryReadOnlyMemory 를 사용하여 임베딩 및 쿼리 벡터의 배열 표현을 저장 하면 성능 향상의 이점을 누릴 수 있습니다. 자세한 학습 은 Atlas Vector Search 가이드 에서 지원되는 벡터 임베딩 유형을 참조하세요.

.NET/C# 드라이버를 사용하여 C# 객체를 직렬화하는 방법에 대해 자세히 알아보려면 다음 페이지를 참조하세요.

이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.

돌아가기

쿼리