MongoDB的C#官方驅動InvalidOperationException異常的解決辦法

異常狀況描述

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

相關文章
相關標籤/搜索