1

使用官方 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()

但我得到的只是一个充满空值的空对象。顺便说一下,POCO 对象不是从 BsonDocument 继承的,但它确实可以很好地序列化,我想利用它装饰的所有 Bson 属性,这就是为什么我不想以其他方式复制它的原因。我想要一个副本,因为 DB 驱动程序会这样做。

4

1 回答 1

7

这比这容易得多。

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 扩展方法。

于 2012-08-16T20:47:31.627 回答