zoukankan      html  css  js  c++  java
  • 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个参数的构造器,因为他更专业。

    另外,

  • 相关阅读:
    Android实现App版本自动更新
    Android EditText+ListPopupWindow实现可编辑的下拉列表
    Android 侧滑面板的实现(DragLayout)
    android之SlideMenu双向滑动
    Android 从无到有打造一个炫酷的进度条效果
    Android 自定义View修炼-仿360手机卫士波浪球进度的实现
    TabLayout禁止选择
    Metasploit的攻击实例讲解----ms10_046快捷方式图标漏洞
    PowerDesigner 16.5的下载安装破解注册(图文详解)
    Metasploit的armitage初步使用
  • 原文地址:https://www.cnblogs.com/msdynax/p/3740167.html
Copyright © 2011-2022 走看看