1.介绍
该文档是1.8版本的C#驱动。
本节教程讨论C#类和BSON文档之间的序列化和反序列化。序列化是将对象映射成一个可以存储在MongoDB中的BSON文档的过程,反序列化是从一个BSON文档重新构建一个对象的过程。由于这样的原因,序列化过程也总是被用做“对象映射”。
序列化通过BSON库处理。BSON库有一个可扩展的序列化架构,所有如果你需要控制序列化,你可以做到。BSON库提供一个默认序列化,大多数时候符合你的需求。你可以以多种方式补充默认序列化,来处理你的特殊需求。
默认序列化处理器处理序列化的主要方式,是通过”class map”。一个class map是一个结构,它定义了一个类和一个BSON文档之间的映射。它包含要序列化的字段和属性,并定义了序列化的参数。
默认序列化器,也内建支持许多.NET数据类型(原生值,数组,列表,字典,等),为class mas提供支持。
在类的实例被序列化之前,要先存在class map。你既可以自己定义该class map,也可以简单允许第一次运行时,自动创建,也叫做automapping。
2.创建一个Class Map
要创建一个class map,在你的初始化代码中写:
BsonClassMap.RegisterClassMap<MyClass>();
这回导致MyClass被自动映射和注册。在本例中,你
3.创建Maps
默认地,类必须包含一个0参数的构造器,它会被用于初始化一个实例。然而,也能配置一个构造器,它的参数被映射到属性和字段。这里有一组这样的方法。
使用一个表达式,你能使得驱动使用创建器映射:
public class Person { public string FirstName { get; private set; } public string LastName { get; private set; } public Person(string firstName, string lastName) { FirstName = firstName; LastName = lastName; } } // snip... BsonClassMap.RegisterClassMap<Person>(cm => { cm.AutoMap(); cm.MapCreator(p => new Person(p.FirstName, p.LastName)); });
使用属性:
public class Person { public string FirstName { get; set; } public string LastName { get; set; } [BsonConstructor] public Person(string firstName, string lastName) { FirstName = firstName; LastName = lastName; } }
当有多个构造器时,会使用更匹配的。例如:
public class Person { public string FirstName { get; set; } public string LastName { get; set; } public DateTime? BirthDate { get; set; } [BsonConstructor] public Person(string firstName, string lastName) { // snip... } [BsonConstructor] public Person(string firstName, string lastName, DateTime birthDate) { // snip... } }
如果数据库中的文档有一个BirthData元素,我们会选择使用有3个参数的构造器,因为他更专业。
另外,