1

我有一堂课:

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 驱动程序可以毫无问题地自动映射这种类型,我只是将Product对象转换为ProductDoc对象,反之亦然我需要读写数据库。但这似乎很hacky,即使它很简单。

更新:

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

4

1 回答 1

1

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

于 2012-09-06T15:33:53.310 回答