And*_*rei 5 .net c# mongodb .net-core mongodb-.net-driver
尝试从 mongodb 检索对象时出错:
InvalidOperationException:无法使用在抽象类上声明的构造函数编译 NewExpression
我的班级是:
public class App
{
public List<Feature> Features { get; set; }
}
public abstract class Feature
{
public string Name { get; set; }
}
public class ConcreteFeature : Feature
{
public string ConcreteProp { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
不知道为什么它有抽象问题。我明白了,mongodb 记录了_t: "ConcreteFeature"
类型名称,它具有反序列化的所有功能。我在抽象类中没有构造函数。
想法?
我需要为 BsonClassMap 列出“KnownTypes”以使其工作:
BsonClassMap.RegisterClassMap<Feature>(cm => {
cm.AutoMap();
cm.SetIsRootClass(true);
var featureType = typeof(Feature);
featureType.Assembly.GetTypes()
.Where(type => featureType.IsAssignableFrom(type)).ToList()
.ForEach(type => cm.AddKnownType(type));
});
Run Code Online (Sandbox Code Playgroud)
这样,即使您添加新类型,只要它们在 1 个程序集中,您也不需要修改代码。更多信息在这里。
小智 5
1.关于抽象类的使用
[BsonDiscriminator(Required = true)]
[BsonKnownTypes(typeof(ConcreteFeature)]
public abstract class Feature
{
public string Name { get; set; }
}
public class ConcreteFeature : Feature
{
public string ConcreteProp { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3844 次 |
最近记录: |