cir*_*rus 1 mongodb bson mongodb-.net-driver
使用官方C#驱动程序制作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()
Run Code Online (Sandbox Code Playgroud)
但我得到的只是一个充满空值的空对象.顺便说一句,POCO对象不会从BsonDocument继承,但它确实很好地序列化,我想要利用它所装饰的所有Bson属性,这就是为什么我不想以其他方式复制它.我想要一个副本,因为数据库驱动程序会这样做.
它比那容易得多.
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);
Run Code Online (Sandbox Code Playgroud)
如果您想了解它的工作原理,可以查看ToBsonDocument扩展方法.