【问题标题】:how to configure class for mongo de/serialization如何为 mongo 反序列化配置类
【发布时间】:2012-09-05 11:09:55
【问题描述】:

我有一堂课:

class Product
{
    public String Name { get; private set; }
    private List<Release> releases;
    private List<Area> areas;

    public List<Release> Releases
    {
        get
        {
            return new List<Release>(releases);
        }
        private set
        {
            releases = value
        }
    }

    public List<Area> Area
    {
        get
        {
            return new List<Area>(areas);
        }
        private set
        {
            areas = value
        }
    }

    public Product(String Name)
    {
        this.Name = Name;
        this.Releases = new List<Release>();
        this.Areas = new List<Area>();
    }

    public Product(String Name, List<Release> Releases, List<Area> Areas)
    {
        this.Name = Name;
        this.Releases = Releases;
        this.Areas = Areas;
    }
}

我的理解是 Mongodb bson 序列化器将无法自动反序列化 Product 对象,因为所有属性/字段都没有公共读写访问权限,并且我不提供无参数构造函数。我如何才能将其配置为完全可反序列化?我查看了 mongodb.org 上的序列化教程,但它没有涵盖这种情况。我还发现了这个https://jira.mongodb.org/browse/CSHARP-476 增强功能,但它看起来还没有实现。

目前我有另一个类ProductDoc,它具有相同的字段/属性,但它们具有完全的公共读写访问权限,并且我提供了一个无参数构造函数,因此 mongodb 驱动程序可以毫无问题地自动映射这种类型,我只需转换 @ 987654326@ 对象到ProductDoc 对象,反之亦然,当我需要对数据库进行读写时。但这看起来很hacky,尽管它很简单。

更新:

似乎我的公共属性上的 set 访问器是私有的并不重要,只是属性本身是公共的,并且缺少无参数构造函数似乎也不影响反序列化过程.谁能确认这是如何工作的?以及here的信息是否正确。

【问题讨论】:

    标签: c# mongodb serialization bson


    【解决方案1】:

    快速入门教程是正确的。你可以使用私有的 getter 和 setter。但是,如果你担心的话,编写一个测试程序来尝试一些东西总是最好的答案。 “公共”读/写表示 getter 或 setter 之一需要是公共的。

    【讨论】:

    • 我已经编写了一个测试程序,你当然是对的。从那以后,我发现了反思的艺术。
    • 是的。反思=真棒。我们需要在映射 api 以及我们的 linq 提供程序中大量使用它。小心,因为反射很慢。通过在运行时编译 getter 和 setter,我们在许多地方进行了优化。玩得开心!!!
    猜你喜欢
    • 2022-10-23
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    相关资源
    最近更新 更多