2016-01-26 71 views
0

我有一個expandoObject d,我想遍歷一個字典並使用它的鍵和值來創建一個新對象{key:value, key:value},然後將該新對象分配給d,當然最後將它序列化爲bsonDocument進行插入。如何使用嵌套的expandoObjects創建一個BSON文檔,其中一個是轉換後的字典

如果簡單地拿字典並做一個.toArray(),我沒有得到mongoDB序列化錯誤,但是如果我從那個新對象中創建一個新的expandObject,或者只是傳遞我提到的字典作爲d.newObject,一個無用的mondodb序列化錯誤。

我該如何解決這個問題(1),以及我對BSON文檔期望什麼可以或不可以序列化的內容有何看法?

回答

0

而不是從零開始編寫ExpandoObject這種動態類型的功能,你可以從Slazure這樣的動態ORM或ODM中獲益,MongoDB支持仍處於內部測試階段,但應儘快公開發布。這裏是一個Slazure Linq查詢從「TestCustomers」集合返回一些文件和每個文件屬性名稱寫入到控制檯的例子:

using SysSurge.Slazure.MongoDB.Linq; 
using SysSurge.Slazure.Core; 
using SysSurge.Slazure.Core.Linq.QueryParser; 

public void EnumProperties() 
{ 
    // Get a reference to the collection 
    dynamic storage = new QueryableStorage<DynDocument>("mongodb://user:[email protected]/MongoDBExample"); 
    QueryableCollection<DynDocument> collection = storage.TestCustomers; 

    // Build collection query 
    var queryResult = collection.Where("SignedUpForNewsletter = true and Age < 22"); 

    foreach (DynDocument document in queryResult) 
    { 
     foreach (KeyValuePair<string, IDynProperty> keyValuePair in document) 
     { 
      Console.WriteLine(keyValuePair.Key); 
     } 
    } 
} 

如果你需要得到實際的BsonDocument對象,那麼你可以使用通過調用Document方法從Slazure DynDocument對象中獲得它,示例如下:

foreach (DynDocument document in queryResult) 
{ 
    BsonDocument bsonDoc = document.Document  
    Console.WriteLine(bsonDoc["someProperty"].AsString()); 
相關問題