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