0
使用MongoDb站點的C#驅動程序將我的Web應用程序的持久層更改爲MongoDb。驚喜地發現我的所有考試都通過了...除了一門課。它的一個屬性是實現IList的類型,由於某種原因它不保存它的項目。MongoDb C#驅動程序,實現IList類型的屬性不保存
我已經構建了一個最小的測試用例來說明。下面是測試代碼來創建和保存父對象:如果我宣佈Foo.Foos爲List<Foo>
它的工作原理
var fooCollection = database.GetCollection<Foo>(typeof(Foo).Name);
var foo = new Foo {Id = "Root"};
foo.Foos.Add(new Foo{ Id = "Child" });
fooCollection.Save(foo);
:
public class Foo {
public Foo() {
Foos = new List<Foo>();
}
public List<Foo> Foos;
public string Id;
}
(正確的)結果:
{ "_id" : "root", "Foos" : [ { "Foos" : [], "_id" : "child" } ] }
但我需要的是:
public class Foo {
public Foo() {
Foos = new FooList();
}
public FooList Foos;
public string Id;
}
public class FooList : IList<Foo> {
//IList implementation omitted for brevity
}
的(不正確)的結果是:
{ "_id" : "root", "Foos" : { "Capacity" : 4 } }
注意它有沒有用我的IList實現做的結果是相同的,如果我使用FooList : List<Foo>
。
我假設BSON串行器變得困惑?我看着文件上鑑別,這使我覺得這可能幫助:
BsonClassMap.RegisterClassMap<List<Foo>>(cm => {
cm.AutoMap();
cm.SetIsRootClass(true);
});
BsonClassMap.RegisterClassMap<FooList>();
我還沒有得到我的項目雖然挽救,最終看起來像這樣:
{ "_id" : "root", "Foos" : { "_t" : [ "List`1", "FooList" ], "Capacity" : 4 } }
如何我可以正確保存FooList
嗎?
你試過添加任何'BsonKnownType`屬性? – 2011-01-24 05:31:17