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

另外,

Serialize Documents with the C# Driver的更多相关文章

  1. MongoDB C# / .NET Driver

    MongoDB C# Driver是官方提供的.NET C#驱动. Getting Started with the C# Driver C# Driver Tutorial C# Driver LI ...

  2. MangoDB在C#中的使用

    http://blog.sina.com.cn/s/blog_927f3c2401011937.html 图形工具 http://api.mongodb.org/csharp/current/html ...

  3. selenium对Alert弹框的多种处理

    Alert弹框是一个很烦人的控件,因为当前页面如果弹出了该弹框,你必须要处理它,不然你就不能操作页面的其它元素,下面我列出了alert弹框在多种场景下的处理办法. 明确知道系统哪个地方会弹alert ...

  4. 使用PhantomJS报warnings.warn('Selenium support for PhantomJS has been deprecated, please use headless '解决方法

    selenium已经放弃PhantomJS了,建议使用火狐或者谷歌无界面浏览器.使用无界面浏览器Selenium+Headless Firefox Selenium+Headless Firefox和 ...

  5. mongodb驱动接口

    mongodb对外接口或驱动:https://docs.mongodb.com/ecosystem/drivers/,包含C,C++,Go,Python等. C驱动 mongodb的C驱动,即libm ...

  6. 深入linux kernel内核配置选项

    ============================================================================== 深入linux kernel内核配置选项 ...

  7. MongoDB Java Driver操作指南

    MongoDB为Java提供了非常丰富的API操作,相比关系型数据库,这种NoSQL本身的数据也有点面向对象的意思,所以对于Java来说,Mongo的数据结构更加友好. MongoDB在今年做了一次重 ...

  8. MongoDB C Driver使用教程

    MongoDB C Driver使用教程 转载请注明出处http://www.cnblogs.com/oloroso/ 本指南提供简介 MongoDB C 驱动程序. 在 C API 的详细信息,请参 ...

  9. Ignoring Extra Elements in mongoDB C# Driver

    MongoDB删除字段后会报错: Element ... does not match any field or property of class Customer. 需要在实体类增加 [BsonI ...

随机推荐

  1. 构建LINUX下的入侵检测系统——LIDS 系统管理命令--vlock

    构建LINUX下的入侵检测系统——LIDS   系统管理命令--vlock http://blog.chinaunix.net/uid-306663-id-2440200.html LIDS官方网站: ...

  2. def文件格式

    模块定义   (.def)   文件    模块定义   (.def)   文件为链接器提供有关被链接程序的导出.属性及其他方面的  信息.生成   DLL   时,.def   文件最有用.由于存在 ...

  3. gcc常用

    gcc选项:-I指定头文件搜索路径.-D编译时定义宏-L链接时指定库文件搜索路径-l指定库文件名称-pipe使用管道,一个程序的输出作为输入直接送给另外一个程序, 而且还可以一直连续下去,不需要临时文 ...

  4. Hint

    select  /*+  first_rows(20)  */  *  from  t  where  id<20 --分页 select  /*+  all_rows  */  *  from ...

  5. LUA 模块化编程例子

    LUA module lua语言中module接口用于定义一个模块, 将模块的实现封装到一个文件中, 开放的 函数 和 数据, 不以local标识,然后在其他文件中, 引用此模块, 使用模块名(一个命 ...

  6. Java基础之在窗口中绘图——显示曲线的控制点(CurveApplet 2 displaying control points)

    Applet程序. import javax.swing.*; import java.awt.*; import java.awt.geom.*; @SuppressWarnings("s ...

  7. linux:档案权限

    一.例如:-rw-r--r--.  1 root root  129 Dec 29  2013 .tcshrc 详细: 1.-rw-r--r--:档案类型和权限(总共十个栏位) 1.1:第一个栏位代表 ...

  8. HashedWheelTimer

    HashedWheelTimer 是根据 Hashed and Hierarchical Timing Wheels: Data Structuresfor the Efficient Impleme ...

  9. Codeforce Round #222 Div2

    这场断网,本来有个别人的比较卡的无线 但后面睡着了- -! C:额,逆向想下! B:... A:...

  10. hduoj 4712 Hamming Distance 2013 ACM/ICPC Asia Regional Online —— Warmup

    http://acm.hdu.edu.cn/showproblem.php?pid=4712 Hamming Distance Time Limit: 6000/3000 MS (Java/Other ...