2016-12-02 89 views
0

我試圖導入this mongo tutorial中的示例數據集,但我正在嘗試使用C#代碼來完成此操作。以下是我有:從JSON字符串反序列化List <BsonDocument>

var reader = new StreamReader("C:\\primer-dataset.json"); 
string line; 
var sb = new StringBuilder(); 
while ((line = reader.ReadLine()) != null) 
{ 
    sb.Append(line); 
} 

var documents = BsonSerializer.Deserialize<List<BsonDocument>>(sb.ToString()); 
var collection = _database.GetCollection<BsonDocument>("restaurants"); 
collection.InsertMany(documents); 

我收到以下錯誤,當我嘗試反序列化JSON字符串:

不能反序列化從BsonType「文件」

「列表」我無法在網上找到任何東西來說明我做錯了什麼。

+0

注:此頁面(https://docs.mongodb.com/ getting-started/csharp/import-data /)鏈接到示例數據集[here](https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/primer-dataset.json)。我對json不太瞭解,但由於存在多個根元素,因此它似乎無效。因爲它是一個'List >'我非常肯定在整個事情上都需要'[]',那麼每個記錄都需要一個逗號來分隔它。但是這個文件直接來自MongoDb的網站作爲示例文件,因此必須有另一種方式來讀取它。 – Quantic

+1

答案似乎解釋了[這裏](https://zaiste.net/2012/08/importing_json_into_mongodb/):「默認情況下,monogoimport假定文件從一個特殊的結構導入:類似於JSON格式,除了每行一個文件是允許的,每個文件之後都沒有逗號「。您看到的示例文件是*'*僅用於['mongoimport'](https://docs.mongodb.com/manual/reference/program/mongoimport/)。要做你的測試,你可以將第一個X記錄複製到一個新文件中,在它們周圍放置'[]'並用逗號分隔它們。那麼我認爲你的命令會正常工作。 – Quantic

+0

感謝您的澄清(和你的幫助)。我通過修改json文件並解析爲JArray來實現它,他們循環遍歷並插入集合中。我會在幾分鐘後發佈答案。 –

回答

0

最後,我不得不根據Quantic的評論修改JSON文檔。示例文檔假定用戶將使用mongoimport導入數據。有一次,我添加了必要的括號和逗號,使之成爲標準陣列,我可以使用下面的C#代碼導入它:

var collection = _database.GetCollection<BsonDocument>("restaurants"); 
    var reader = new StreamReader("C:\\primer-dataset.json"); 
    string line; 
    var sb = new StringBuilder(); 
    while ((line = reader.ReadLine()) != null) 
    { 
     sb.Append(line); 
    } 

    var arr = JArray.Parse(sb.ToString()); 
    foreach(JObject o in arr) 
    { 
     var d = BsonDocument.Parse(o.ToString()); 
     collection.InsertOne(d); 
    }  
相關問題