2013-03-25 68 views
0

爲了使這個簡短易懂,http://mikaelkoskinen.net/mongodb-aggregation-framework-examples-in-c/顯示了我想要完成的一些事情。這個「ToDynamic」呼叫在從Aggregation返回的DateTime值中斷。Mongodb:將聚合框架結果轉化爲POCO的優雅方法

隨着我們需要一個日期時間的瞭解,我能變成這樣:

public static dynamic ToDynamic(this BsonDocument doc) 
    { 
     var json = doc.ToJson(new JsonWriterSettings { OutputMode = JsonOutputMode.TenGen }); 
     dynamic obj = JToken.Parse(json); 
     return obj; 
    } 

這是能夠成功地改變這個對象爲JContainer,我能使用解析:

returnApp = BsonSerializer.Deserialize(service.apps.ToString(), typeof(MyMongoObject)); 

這是工作,直到我們想要採取一個ObjectId和反序列化,以及。這組操作在「ToDynamic」調用中爆發,因爲它無法解析返回的ObjectId。

有沒有人找到一種將聚合框架結果轉化爲POCO的連續成功,優雅的方法?

+0

你可以張貼一些具體的MongoDB記錄的例子不解析出? – 2013-04-02 17:26:18

回答

0

您示例中的變量'json'將包含10gen特定值,例如ISODate(),BinData()和ObjectId()。我懷疑JToken.Parse(txt)期望txt是有效的json,而不是bson。

在接下來的一行中,JToken.Parse()將採用類似json但實際專有的字符串並嘗試解析它。你可能會得到更好的服務使用BsonReader和使用JToken.ReadFrom(myBsonReader)

using (var reader = new BsonReader(inputStream)) 
{ 
    var json = (JObject)JToken.ReadFrom(reader); 
}