序列化
Overview
在本指南中,您可以了解如何使用 MongoDB .NET/C# 驱动程序执行序列化。序列化是将 C# 对象映射到 BSON 文档以存储在 MongoDB 中的过程。
序列化器
序列化器是处理 C# 对象与 BSON 文档之间转换的类。 序列化器实施 IBsonSerializer
接口。 .NET/C# 驱动程序有许多内置序列化器,用于处理基元类型、集合类型和自定义类。
有关可用序列化器的完整列表,请参阅 序列化器命名空间 API 文档。
序列化器注册表
序列化器注册表包含您的应用程序可用的所有已注册的序列化器。许多内置序列化器在应用程序启动时会自动注册到序列化器注册表中。但是,在使用自定义序列化器之前,您必须将其添加到序列化器注册表中,如下例所示:
BsonSerializer.RegisterSerializer(new CustomTypeSerializer());
如要访问序列化器注册表,请使用 BsonSerializer
类的 SerializerRegistry
属性,如下所示:
var intSerializer = BsonSerializer.SerializerRegistry.GetSerializer<int>();
重要
序列化器注册表是一个全局注册表。这表示您不能在单个应用程序中使用多个注册表。
自定义序列化器
在某些情况下,您可能需要创建自定义序列化器。创建自定义序列化器时,请实现 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
IBsonIdProvider 接口提供 和GetDocumentId()
SetDocumentId()
方法,如果要序列化的对象使用_id
以外的ObjectId
类型,则该接口非常有用。
IBsonDocumentSerializer
实施 IBsonDocumentSerializer 接口使驱动程序能够访问正在序列化的对象的成员信息。这允许驱动程序在使用自定义序列化器时正确构造类型安全的查询。
IBsonArraySerializer
实施 IBsonArraySerializer 接口使驱动程序能够访问数组中各个项目的序列化信息。
更多信息
要了解有关使用 .NET/C# 驱动程序序列化 C# 对象的更多信息,请参阅以下页面:
要进一步了解本指南所讨论的任何方法或类型,请参阅以下 API 文档: