2012-05-31 117 views
0

爲Expando對象的反序列化我在蒙戈-C#環境和使用10gen的蒙戈驅動程序。我面臨當我嘗試反序列化蒙戈文檔中的數據時,它有一個子文件和子文件不是強類型的問題。換句話說,如果子文檔是在Expando或只是一個匿名對象(),那麼它給出錯誤的同時,出現以下錯誤反序列化:在蒙戈

System.IO.FileFormatException: A document being deserialized to System.Object must be empty.

我們,我可以前後蒙戈讀放一個過濾器/寫一個我的對象轉換爲上飛一個BSONDocument但我認爲BSOnDocument和(或Expando的匿名類型)之間沒有投用。

寫一個自定義的反序列化工具聽起來像太多的工作。我只是想知道以前有人遇到過這個問題,他們是如何處理這個問題的?

回答

1

目前,由於10gen驅動程序基於.NET 3.5,因此我們不支持動態對象。目前,處理此問題的方法是使用ExtraElements成員。你可以在這裏閱讀:http://www.mongodb.org/display/DOCS/CSharp+Driver+Serialization+Tutorial#CSharpDriverSerializationTutorial-Supportingextraelements

我們將在晚些時候完全支持.NET 4.0,並且這將完全支持動態對象。如果你確實需要的功能現在,您可以在這裏使用其他組件看到我的並排側支撐秒殺:https://github.com/craiggwilson/mongo-csharp-driver/tree/dynamic。然而,它沒有經過測試,確實只是一個高峯,所以要謹慎。

+0

我可以在這裏看到您的要點。但我的問題在於,我對模塊的輸入基本上是一個expando對象,輸出也希望處理一個expando。在這種情況下,即使我最終節省蒙戈一個BSON文件,我需要弄清楚從蒙戈以BSON反之亦然..... – TeaLeave

+0

鑄造機制。如果你總是使用expandos的,那麼你就可以創建自定義IBsonSerializer處理與Expando的轉換。你可以使用db.GetCollection (「name」)來讓它們進出。由於Expando實現了IDictionary ,因此您可以簡單地將您的方法內部推遲到DictionaryGenericSerializer。在master中實際上是一些代碼,它已經這樣做了(關於IDictionary ,所以你不需要這個)。在此之前... –

+0

試圖做到這一點給我follwing錯誤:'元素_id'不匹配類System.Dynamic.ExpandoObject的任何字段或屬性。' – TeaLeave