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

直列化

項目一覧

  • Overview
  • シリアライザー
  • シリアライザー レジストリ
  • カスタムシリアライザー
  • オプトイン インターフェース
  • IBsonIdProvider
  • IBsonDocumentSerializer
  • IBsonArraySerializer
  • 詳細情報

このガイドでは、MongoDB .NET/C# ドライバーを使用して直列化を実行する方法を学習できます。 直列化は、C# オブジェクトを MongoDB にストレージ用の BSON ドキュメントにマッピングするプロセスです。

Tip

直列化

直列化化 について詳しくは、Wikipedia で 直列化 に関する記事を参照してください。

シリアライザーは、C# オブジェクトと BSON ドキュメントの変換を処理するクラスです。 シリアライザーは IBsonSerializerインターフェースを実装します。 .NET/C# ドライバーには、プリミティブ型、コレクション型、カスタム クラスを処理するために作成された多数の組み込みシリアライザーがあります。

使用可能なシリアライザーの完全なリストについては、「 シリアライザーの名前空間 API ドキュメント 」を参照してください。

シリアライザー レジストリには、アプリケーションで使用できるすべての登録済みシリアライザーが含まれます。 組み込みシリアライザーの多くは、アプリケーションの起動時にシリアライザー レジストリに自動的に登録されます。 ただし、カスタム シリアライザーを使用する前に、次の例に示すように、それをシリアライザー レジストリに追加する必要があります。

BsonSerializer.RegisterSerializer(new CustomTypeSerializer());

シリアライザー レジストリにアクセスするには、次のようにBsonSerializerクラスのSerializerRegistryプロパティを使用します。

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

重要

シリアライザー レジストリはグローバル レジストリです。 つまり、1 つのアプリケーションで複数のレジストリを使用することはできません。

場合によっては、カスタム シリアライザーを作成する必要があるかもしれません。 カスタム シリアライザーを作成するときは、SerializerBase<T> 抽象基本クラスを実装し、 メソッドとDeserialize() Serialize()メソッドをオーバーライドします。

次のコード例は、カスタムBsonRegularExpressionシリアライザーを示しています。

class CustomRegularExpressionSerializer : SerializerBase<Regex>
{
public override Regex Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
var type = context.Reader.GetCurrentBsonType();
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 override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, Regex value)
{
context.Writer.WriteRegularExpression(value);
}
}

.NET/C# ドライバーには、シリアライザーが取り扱うデータ型に応じて、カスタム シリアライザー クラスで実装できるオプションのインターフェースがいくつかあります。

IBsonIdProvider インターフェースは メソッドとGetDocumentId() SetDocumentId()メソッドを提供し、シリアル化するオブジェクトが_id 以外のObjectId タイプを使用する場合に便利です。

IBsonDocumentSerializer の実装 インターフェースを使用すると、ドライバーはシリアル化されているオブジェクトのノード情報にアクセスできます。これにより、ドライバーはカスタム シリアライザーを使用するときに型セーフなクエリを適切に構築できます。

IBsonArraySerializer の実装 インターフェースにより、ドライバーは配列内の個々の項目の直列化情報にアクセスできます。

.NET/C# ドライバーを使用して C# オブジェクトを直列化する方法の詳細については、次のページを参照してください。

  • クラスマッピング

  • POCO

  • 多形オブジェクト

  • GUID

このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。

戻る

クエリを指定する