MongoDriver反序列化

时间:2015-08-18 15:36:18

标签: c# mongodb

我的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)。什么可能是错的?

1 个答案:

答案 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'的异常。