Docs Menu
Docs Home
/ / /
C#/.NET
/ /

GUID

이 페이지의 내용

  • 개요
  • MongoDB 의 GUID
  • GUID 직렬화
  • 속성으로 구성
  • 코드에서 구성
  • 객체 직렬화
  • 추가 정보

이 가이드 에서는 전역 고유 식별자 (GUID)를 직렬화하는 방법을 학습 수 있습니다. ), UUID( 범용 고유 식별자 )라고도 합니다.

ObjectId

MongoDB 애플리케이션에서는 ObjectId 를 사용할 수 있습니다. 유형을 문서 의 고유 식별자로 사용합니다. 가능하면 ObjectId MongoDB 애플리케이션에서 GUID 대신 인스턴스를 사용하는 것이 좋습니다.

GUID는 MongoDB 문서 의 고유 ID 로 사용할 수 있는 16바이트 정수입니다. 다음 코드 차단 은 예시 GUID를 보여줍니다.

00112233-4455-6677-8899-aabbccddeeff

원래 MongoDB 는 GUID를 3 하위 유형BsonBinaryData 값으로 표시했습니다. 하위 유형 3 가 인코딩 중에 GUID의 바이트 순서를 표준화하지 않았기 때문에 서로 다른 MongoDB 드라이버가 서로 다른 바이트 순서로 GUID를 인코딩했습니다.

다음 탭은 BsonBinaryData 하위 유형 3 에 대한 이전 GUID의 다양한 운전자 인코딩을 보여줍니다.

33221100-5544-7766-8899-aabbccddeeff
00112233-4455-6677-8899-aabbccddeeff
77665544-3322-1100-ffee-ddccbbaa9988

애플리케이션 간 GUID 바이트 순서를 표준화하기 위해 모든 MongoDB 드라이버가 동일한 방식으로 인코딩하는 BsonBinaryData 하위 유형 4 을 추가했습니다. 애플리케이션 에서 GUID를 사용하는 경우 BsonBinaryData 하위 유형 4 을(를) 사용하여 저장 하는 것이 좋습니다.

모든 BsonBinaryData 하위 유형의 목록은 BsonBinarySubType 에 대한 API 설명서를 참조하세요. 열거형.

모든 새 BsonBinaryData GUID에 4 하위 유형을 사용하는 것이 좋지만, 일부 이전 MongoDB 컬렉션에는 하위 유형 3 를 사용하는 일부 GUID 필드와 하위 유형 4 을 사용하는 일부 GUID 필드가 포함될 수 있습니다. 이러한 차이점을 고려하기 위해 .NET/ C# 드라이버 는 개별 속성 수준에서 GUID 직렬화를 처리합니다.

.NET/ C# 드라이버 는 GuidRepresentation 열거형 을 사용하여 다양한 BsonBinaryData 하위 유형을 나타냅니다. 다음 표는 GuidRepresentation 열거형 멤버와 해당 BsonBinaryData 하위 유형을 보여줍니다.

GuidRepresentation 멤버
BsonBinaryData 하위 유형
Standard
4
CSharpLegacy
3
JavaLegacy
3
PythonLegacy
3
Unspecified
N/A

참고

CSharpLegacy, JavaLegacyPythonLegacy GUID 표현은 모두 BsonBinaryData 하위 유형 3 와 동일하지만 다른 바이트 순서를 사용합니다.

다음 섹션에서는 애플리케이션 에서 GUID 표현을 구성할 수 있는 방법을 설명합니다.

.NET/ C# 드라이버 를 사용하여 C# 클래스를 문서 스키마자동 매핑하는 경우 GUID 속성 에 BsonGuidRepresentation 특성을 추가하여 해당 표현을 지정할 수 있습니다. 이 속성은 다음의 값을 허용합니다.

다음 코드 예시 에서는 G 속성 에 대한 Standard GUID 표현을 지정합니다.

public class Widget
{
public int Id { get; set; }
[BsonGuidRepresentation(GuidRepresentation.Standard)]
public Guid G { get; set; }
}

자체 직렬화 코드를 작성하는 경우 GuidSerializer 클래스를 사용하여 개별 GUID 값을 BSON 필드에 직렬화 및 역직렬화할 수 있습니다. 드라이버가 GUID를 올바르게 처리하는지 확인하려면 GuidSerializer를 구성할 때 GuidRepresentation 매개변수를 사용합니다.

다음 코드 샘플 은 BsonBinaryData 하위 유형 4 를 사용하는 속성을 직렬화하기 위해 GuidSerializer 클래스의 인스턴스 를 만듭니다.

var guidSerializer = new GuidSerializer(GuidRepresentation.Standard);

대부분의 GUID가 동일한 표현을 사용하는 경우 GuidSerializer를 전역적으로 등록할 수 있습니다. GuidSerializer를 생성하고 등록하려면 부트스트랩 단계와 같이 애플리케이션 초기에 다음 코드를 실행합니다.

BsonSerializer.RegisterSerializer(new GuidSerializer(GuidRepresentation.Standard));

두 개의 BsonBinaryData 하위 유형으로 작업하는 경우 글로벌 직렬 변환기를 BsonGuidRepresentation 속성 속성과 결합할 수 있습니다. 예를 예시, 가장 일반적으로 사용되는 GUID 하위 유형에 대한 글로벌 직렬 변환기를 등록한 다음 BsonGuidRepresentation 속성을 사용하여 다른 하위 유형의 GUID 속성을 나타낼 수 있습니다.

중요

직렬 변환기를 전역으로 등록하지 않는 경우 직렬화 가능한 모든 GUID 속성 에 BsonGuidRepresentation 속성을 적용 해야 합니다. 그렇지 않으면 운전자 가 속성 을 직렬화하려고 할 때 예외가 발생합니다.

ObjectSerializer 를 사용하여 계층적 객체를 하위 문서로 직렬화할 수 있습니다. 이러한 객체의 GUID가 올바르게 직렬화 및 역직렬화되도록 하려면 ObjectSerializer 구성 시 올바른 GUID 표현을 선택합니다.

다음 코드 샘플은 하위 유형 4의 GUID 표현에 대한 ObjectSerializer를 만드는 방법을 보여줍니다.

var objectDiscriminatorConvention = BsonSerializer.LookupDiscriminatorConvention(typeof(object));
var objectSerializer = new ObjectSerializer(objectDiscriminatorConvention, GuidRepresentation.Standard);

애플리케이션이 ObjectSerializer에 의존하여 GUID를 직렬화하는 경우 부트스트랩 단계와 같이 애플리케이션 초기에 직렬 변환기를 등록해야 합니다. 등록한 직렬 변환기는 객체 직렬 변환기가 필요하고 달리 지정되지 않은 경우 전역적으로 사용됩니다.

ObjectSerializer를 등록하려면 BsonSerializer.RegisterSerializer() 메서드에 전달합니다.

var objectDiscriminatorConvention = BsonSerializer.LookupDiscriminatorConvention(typeof(object));
var objectSerializer = new ObjectSerializer(objectDiscriminatorConvention, GuidRepresentation.Standard);
BsonSerializer.RegisterSerializer(objectSerializer);

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

돌아가기

다형성 객체