Serialize Documents with the C# Driver

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个参数的构造器,因为他更专业。

另外,

posted @ 2014-05-20 22:21  Reinhard_Hsu  阅读(304)  评论(0编辑  收藏  举报