2012-01-07 55 views
0

我想制作一个通用方法来从json数据中对文档进行部分更新。 json数据包含正在更新的POCO字段的一个子集。我有这样的:MongoDb:如何使用官方C#驱动程序从json数据进行部分更新

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); 
    } 

这几乎工作,但我的问题是,有型的ObjectId字段反序列化字符串,因为这是他们如何在JSON表示。 (它们已经在客户端的JavaScript JSON2库中进行了序列化)。

所以我的问题是:

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

+0

好了,不能前2小时回答我的问题,所以这里是为注释: – ssn 2012-01-07 13:03:29

+0

好了,解决办法是先反序列化JSON到POCO。 然后用BsonDocumentWrapper包装和将其转换为一个BsonDocument: 因此,这将是这个样子,其中T是POCO类型: 牛逼DOC = JsonSerializer.DeserializeFromString (JSON); var wrapper = BsonDocumentWrapper.Create(doc); var bsonDoc = wrapper.ToBsonDocument(); IMongoUpdate updateDoc = new UpdateDocument(“$ set”,bsonDoc); – ssn 2012-01-07 13:03:38

回答

相关问题