直列化
項目一覧
Overview
このガイドでは、MongoDB .NET/C# ドライバーを使用して直列化を実行する方法を学習できます。 直列化は、C# オブジェクトを MongoDB にストレージ用の BSON ドキュメントにマッピングするプロセスです。
シリアライザー
シリアライザーは、C# オブジェクトと BSON ドキュメントの変換を処理するクラスです。 シリアライザーはIBsonSerializer
インターフェースを実装します。 .NET/C# ドライバーには、プリミティブ型、コレクション型、カスタム クラスを処理するために作成された多数の組み込みシリアライザーがあります。
使用可能なシリアライザーの完全なリストについては、「 シリアライザーの名前空間 API ドキュメント 」を参照してください。
シリアライザー レジストリ
シリアライザー レジストリには、アプリケーションで使用できるすべての登録済みシリアライザーが含まれます。 組み込みシリアライザーの多くは、アプリケーションの起動時にシリアライザー レジストリに自動的に登録されます。 ただし、カスタム シリアライザーを使用する前に、次の例に示すように、それをシリアライザー レジストリに追加する必要があります。
BsonSerializer.RegisterSerializer(new CustomTypeSerializer());
シリアライザー レジストリにアクセスするには、次のようにBsonSerializer
クラスのSerializerRegistry
プロパティを使用します。
var intSerializer = BsonSerializer.SerializerRegistry.GetSerializer<int>();
重要
シリアライザー レジストリはグローバル レジストリです。 つまり、1 つのアプリケーションで複数のレジストリを使用することはできません。
カスタムシリアライザー
独自のカスタム シリアライザーを作成するには、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
IBsonIdProvider インターフェースは メソッドとGetDocumentId()
SetDocumentId()
メソッドを提供し、シリアル化するオブジェクトが_id
以外のObjectId
タイプを使用する場合に便利です。
IBsonDocumentSerializer
IBsonDocumentSerializer の実装 インターフェースを使用すると、ドライバーはシリアル化されているオブジェクトのノード情報にアクセスできます。これにより、ドライバーはカスタム シリアライザーを使用するときに型セーフなクエリを適切に構築できます。
IBsonArraySerializer
IBsonArraySerializer の実装 インターフェースにより、ドライバーは配列内の個々の項目の直列化情報にアクセスできます。
Conventions
規則 パッケージを使用すると、直列化中にドライバーが使用するクラスとそのノードに規則を定義して適用できます。規則 は、各クラスを属性で修飾する必要なく、 C#オブジェクトとMongoDBドキュメント間でデータをマッピングする方法を指定します。
.NET/ C#ドライバーには、直列化プロセスをカスタマイズするために使用できる規則が組み込まれています。次の表では、組み込み規則の一部を説明しています。
コンベンション | 説明 |
---|---|
直列化と逆直列化中に要素名をキャメルケースに変換します。 | |
直列化および逆直列化中に列挙値を指定された表現に変換します。 | |
逆シリアル化中にドキュメント内の余計な要素を無視するかどうかを指定します。 | |
オブジェクトシリアライザーを使用して直列化できるタイプを指定します。 |
利用可能な規則の完全なリストを表示するには、 APIドキュメントの Conventionsクラスの参照を参照してください。
次の例に示すように、指定された規則で ConventionPack
をインスタンス化し、それを ConventionRegistry.Register()
メソッドに渡すことで規則を登録できます。
var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() }; ConventionRegistry.Register("CamelCaseConvention", camelCaseConvention, t => true);
詳細情報
.NET/C# ドライバーを使用して C# オブジェクトを直列化する方法の詳細については、次のページを参照してください。
このガイドで説明したメソッドや型の詳細については、次の API ドキュメントを参照してください。