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

GUID

項目一覧

  • Overview
  • MongoDBの GUID
  • GUID の直列化
  • 属性を使用した構成
  • コードで構成する
  • オブジェクトの直列化
  • 詳細情報

このガイドでは、グローバルにユニークな識別子GUID)(これはユニバーサル一意識別子 (UUID)とも呼ばれます)を直列化する方法を学びます。

Tip

ObjectId

MongoDBアプリケーションでは、 ObjectId を使用できます ドキュメントの一意の識別子としての 型。可能な場合は、ObjectId MongoDBアプリケーションで GUID の代わりに インスタンスを使用することを検討してください。

GUID は16バイトの整数で、 MongoDBドキュメントの一意のIDとして使用できます。次のコード ブロックは、GUID の例を示しています。

00112233-4455-6677-8899-aabbccddeeff

MongoDBは元々、GUID をサブタイプ3BsonBinaryData値として表していました。サブタイプ3はエンコード中に GUID のバイト順序を標準化しなかったため、さまざまなMongoDBドライバーは GUID を異なるバイト順でエンコードしました。

次のタブでは、前述の GUID からBsonBinaryDataサブタイプ3へのさまざまなドライバー エンコーディングが表示されます。

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
該当なし

注意

CSharpLegacyJavaLegacyPythonLegacy 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));

Tip

2 つの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 ドキュメントを参照してください。

戻る

多形オブジェクト