具有以下類:BsonExtraElements字典<串,對象>和自定義類作爲值失敗序列
public class Article
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
public string Name { get; set; }
[BsonExtraElements()]
public Dictionary<string, Object> OtherData { get; set; }
}
我想此對象添加到詞典和寫入到數據庫中:
public class Bird
{
[BsonElement("_n")]
[BsonRequired]
public string Name { get; set; }
[BsonElement("_s")]
[BsonRequired]
public string Species { get; set; }
[BsonElement("_a")]
[BsonRequired]
public int Age { get; set; }
}
var col = db.GetCollection<Article>("articles");
var art = new Article
{
Name = "Blu"
};
art.OtherData = new System.Collections.Generic.Dictionary<string, object>()
{
{ "bird" , new Bird { Name = "Jerry", Age = 4, Species = "European starling" } }
};
col.InsertOne(art);
但是這個失敗,出現以下異常信息:System.ArgumentException:「.NET類型鳥不能映射到BsonValue」
如果我刪除[BsonExtraElements]
在致敬,一切順利,文章在數據庫中結束。爲什麼是這樣?屬性如何防止序列化?由於該屬性不在那裏,我的這個自定義類可以由驅動程序序列化。
使用驅動程序版本2.4.4
我報道這個在MongoDB的[JIRA ](https://jira.mongodb.org/browse/CSHARP-2035)。他們已經研究並回答:「這不是真正的預期行爲。我們現在假設BsonExtraElements字典中的所有值都是BsonValue的實例,或者可以簡單地轉換爲BsonValue。我們應該能夠通過使用序列化器來轉換更復雜的值,比如您的Bird類。 我們會考慮在未來的版本中支持這個.' –