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

    另外,

  • 相关阅读:
    elasticsearch-排序(六)
    elasticsearch-分词器(五)
    elasticsearch-搜索-基本搜索(四)
    elasticsearch-文档(三)
    elasticsearch-集群(二)
    FFmpeg架构之I/O模块分析
    DirectShow 在 VS2010 中开发环境的设置
    预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)
    2012年软件开发者薪资调查报告
    深入了解 VP8
  • 原文地址:https://www.cnblogs.com/msdynax/p/3740167.html
Copyright © 2020-2023  润新知