文档菜单
文档首页
/ / /
C#/.NET
/

序列化

在本页中

  • 概述
  • 序列化程序
  • 序列化程序注册表
  • 自定义序列化程序
  • 选择接口
  • IBsonIdProvider
  • IBsonDocumentSerializer
  • IBsonArraySerializer
  • 更多信息

在本指南中,您可以学习如何使用MongoDB .NET/C# 驱动程序进行序列化。序列化是将C#对象映射到BSON文档以存储在MongoDB中的过程。

提示

序列化

要了解更多关于序列化的信息,请参阅序列化维基百科上的文章。

序列化器是处理C#对象与BSON文档之间转换的类。序列化器实现了IBsonSerializer 接口。.NET/C# 驱动程序包含许多内置序列化器,用于处理基本类型、集合类型和自定义类。

有关可用序列化器的完整列表,请参阅 序列化器命名空间API文档。

序列化器注册表包含所有可用的已注册序列化器。许多内置序列化器在应用程序启动时自动注册到序列化器注册表中。但是,在使用自定义序列化器之前,您必须将其添加到序列化器注册表中,如下例所示

BsonSerializer.RegisterSerializer(new CustomTypeSerializer());

要访问序列化器注册表,请使用以下方式使用BsonSerializer类的SerializerRegistry属性

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

重要

序列化器注册表是一个全局注册表。这意味着您不能在单个应用程序中使用多个注册表。

要创建自己的自定义序列化器,实现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 接口提供了 GetDocumentId()SetDocumentId() 方法,如果序列化的对象使用除 ObjectId 之外的其他 _id 类型,则非常有用。

实现IBsonDocumentSerializer接口允许驱动程序访问您正在序列化的对象成员信息。这允许驱动程序在使用自定义序列化器时正确构建类型安全的查询。

实现IBsonArraySerializer接口允许驱动程序访问数组中各个项目的序列化信息。

要了解如何使用 .NET/C# 驱动程序序列化 C# 对象的更多信息,请参阅以下页面

  • 类映射

  • POCOs

  • 多态对象

  • GUIDs

要了解本指南中讨论的任何方法或类型,请参阅以下 API 文档

返回

查询