MongoDb:如何使用官方C#驱动程序从json数据进行部分更新

MongoDb:如何使用官方C#驱动程序从json数据进行部分更新,c#,mongodb,partial,C#,Mongodb,Partial,我想用一个通用方法从json数据部分更新文档。json数据包含正在更新的POCO字段的子集。我有这个: public static void Update(MongoCollection collection, ObjectId id, string jsonData) { // assume jsonData does not contain the id field. var bsonDoc = BsonSerializer.Deserialize&

我想用一个通用方法从json数据部分更新文档。json数据包含正在更新的POCO字段的子集。我有这个:

    public static void Update(MongoCollection collection, ObjectId id, string jsonData) {
         // assume jsonData does not contain the id field.
        var bsonDoc = BsonSerializer.Deserialize<BsonDocument>(jsonData);  
        IMongoUpdate updateDoc = new UpdateDocument("$set", bsonDoc);
        collection.Update(Query.EQ("_id",id), updateDoc);
    }
publicstaticvoid更新(MongoCollection集合、ObjectId、字符串jsonData){
//假设jsonData不包含id字段。
var bsonDoc=BsonSerializer.Deserialize(jsonData);
IMongoUpdate updateDoc=新的更新文档(“$set”,bsonDoc);
collection.Update(Query.EQ(“\u id”,id),updateDoc);
}
这几乎可以实现,但我的问题是,ObjectId类型的字段被反序列化为字符串,因为JSON就是这样表示的。(它们已在客户端用javascript JSON2库序列化)

因此,我的问题是:

1) 在官方的C#驱动程序中使用json数据的通用部分更新方法的最佳方式是什么?
2) 在使用BsonSerializer时,如何将poco字段反序列化为正确的类型,而不仅仅是字符串?

另请参见:

好吧,在2小时之前无法回答我自己的问题,所以这里是一个注释:好的,解决方案是首先将json反序列化为poco。然后用BsonDocumentWrapper包装并将其转换为BsonDocument:因此它看起来像这样,其中T是POCO类型:T doc=JsonSerializer.DeserializeFromString(json);var wrapper=BsonDocumentWrapper.Create(doc);var bsonDoc=wrapper.ToBsonDocument();IMongoUpdate updateDoc=新的更新文档(“$set”,bsonDoc);