有一个“文章”类,其中包含一个“List<段落>”类型的属性,“段落”类是抽象类,其子类有“副标题段落”、“文本段落”、“图像段落”、“附件段落”、“列表段落”等类型。html
将“文章”类型的对象存入MongoDB数据库彻底没问题,可是从数据库取回则会引起这样的异常:数据库
[InvalidOperationException: 没法建立抽象类的实例。]测试
以前曾就此问题向 magicDict 请教过,他给出的办法是参照这篇博文:http://www.cnblogs.com/zlp520/p/3921435.htmlspa
我没有进行实测,由于同时我找到一个貌似更简便的方法:code
1.在段落类的头部标注特性: htm
[BsonKnownTypes(typeof(文本段落), typeof(列表段落), typeof(副标题段落), typeof(附件段落), typeof(图像段落))]
2.在实例化MongoClient以前声明: 对象
BsonClassMap.LookupClassMap(typeof(MongoModels.段落));
如此即可完美解决此问题。blog
除了这种包含抽象类型属性的状况,对于一个集合中默认类型为抽象类型的状况也适用此解决方法。接口
接口未进行测试,印象中也会报一样错误,猜测解决方法应该也是如此。get
需注意的是,此方法仅适合于你能够修改源代码的状况,那篇 magicDict 推荐的文章的解决方法在不能修改源代码的状况下也可用。