我的MongoDriver存在问题。我有一个来自Class1的继承类,一个用于Class1的mongo存储库。例如:
public class Class1: EntityBase
{
[BsonElement("a")]
public A Attr { get; set; }
}
public class Class2: Class1
{
[BsonElement("d")]
public IList<float> D{ get; set; }
[BsonElement("p")]
public int P{ get; set; }
[BsonElement("s")]
public int S{ get; set; }
}
我的解决方案中有几个项目。我有项目,其中包含类所在的存储库。当我尝试在第一个项目中插入并加载Class2实例时,一切都很好。但是当我试图在另一方面做同样的事情时:
Element 'd' does not match any field or property of class Class1.
两个项目都引用了存储库项目(dll)。什么可能是错的?
答案 0 :(得分:1)
我找到了solotuion。 Class1
应该有mongo属性[BsonKnownTypes]
所以Class1
应该是这样的:
[BsonKnownTypes(typeof(Class2))]
public class Class1: EntityBase
{
[BsonElement("a")]
public A Attr { get; set; }
}
一个项目起作用而另一个项目抛出异常的原因很简单。第一个usel Class2
并将一个实例插入到存储库中,因此mongoDriver注册了继承类型。之后,它能够将存储的实例反序列化为Class2
。第二个人不知道Class2
所以它试图将对象反序列化为Class1
,并且它抛出了关于未知元素'd'的异常。