有一個「文章」類,其中包含一個「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 推薦的文章的解決方法在不能修改源代碼的狀況下也可用。