2012-08-16 51 views
1

使用官方C#驅動程序製作MongoDB POCO實體的新副本的最佳方式是什麼?如何在C#驅動程序中用BsonSerializer克隆/複製MongoDB的POCO實體

我試過這個;

public T Clone() 
    { 
     var bsonWriter = new BsonDocumentWriter(new BsonDocument(), BsonDocumentWriterSettings.Defaults); 
     BsonSerializer.Serialize(bsonWriter, this); 
     var newDoc = bsonWriter.ToBsonDocument(typeof(T)); 
     var e = BsonSerializer.Deserialize(newDoc , typeof(T)); 
     return e as T; 

    }//Clone() 

但是我得到的只是一個空對象,其中充滿了空值。 POCO對象不會從BsonDocument繼承,但它確實序列化的很好,我想利用它所裝飾的所有Bson屬性,這就是爲什麼我不想以其他方式複製它。我想要一個副本,因爲DB驅動程序會這樣做。

回答

6

這比這更容易。

using MongoDB.Bson; 
using MongoDB.Bson.Serialization; 

//... 

var test = new Test { Id = ObjectId.GenerateNewId(), Name = "Jack" }; 
var doc = test.ToBsonDocument(); 
var copy = BsonSerializer.Deserialize<Test>(doc); 

如果您想了解它的工作原理,可以查看ToBsonDocument擴展方法。

+0

奇妙的是,這很好。謝謝! – cirrus 2012-08-16 21:45:07

相關問題