用C# 6我可以写:
public class Person
{
public Guid Id { get; }
public string Name { get; }
public Person(Guid id, string name)
{
Id = id;
Name = name;
}
}
不幸的是,MongoDb驱动程序无法正确序列化此类,属性无法序列化。
MongoDb只使用getter和setter序列化默认属性,我知道你可以手动改变类Map,告诉序列化器包含get-only属性,但是我一直在寻找一种通用的方法来避免定制每个Map。
我想创建一个类似于ReadWriteMemberFinderConvention的自定义约定,但不使用CanWrite
检查。
有其他的解决方案吗?构造函数将被自动调用还是我需要一些其他的定制?
5条答案
按热度按时间x0fgdtte1#
更新:MongoDB.bson2.10版现在提供了一个不可变的TypeClassMapConvention
我试图通过创建一个约定来解决这个问题,该约定Map所有与构造函数匹配的只读属性以及匹配的构造函数。
假设您有一个不可变的类,如下所示:
下面是大会的代码:
可以使用以下命令注册i:
yhuiod9q2#
我也遇到了同样的问题,发现公认的答案过于复杂。
相反,您只需将BsonRepresentation特性添加到要序列化的只读属性:
ajsxfq5m3#
如果你不希望所有的只读属性都被序列化,你可以添加一个公共集合,不做任何事情(如果适用的话),只要注意当你的类被反序列化时,这个属性将被重新计算。
ubby3x7f4#
假设您有一个不可变的类,如下所示:
只需添加[BsonElement]即可
krugob8w5#
这是对上述注册公约后的简化。
应制定这一公约,
然后注册