2016-12-02 7 views
0

サンプルデータセットをthis mongo tutorialにインポートしようとしていますが、C#コードを使用して処理しようとしています。ここで私が持っているものです。JSON文字列からリストを逆シリアル化する

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/ Iが標準配列する必要ブラケットとカンマを追加した後、私は、次のC#コードを使用してインポートすることができましたGetting Started/csharp/import-data /)はサンプルデータセット[ここ](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はファイルをインポートするための特別な構造を前提としています。 1行につき1つの文書が許可されます。あなたが持っているサンプルファイルは、見た目から['mongoimport'](https://docs.mongodb.com/manual/reference/program/mongoimport/)の* only *です。テストを行うには、最初のXレコードを新しいファイルにコピーし、 '[]'を書いてカンマで区切ります。私はあなたの命令がうまくいくと思います。 – Quantic

+0

説明してくれてありがとう(そしてあなたの助け)。 jsonファイルを修正し、JArrayにパースして、それらをループしてコレクションに挿入することで、動作させることができました。私は数分で答えを投稿します。 –

答えて

0

最後に、Quanticのコメントに基づいてJSONドキュメントを修正する必要がありました。サンプル文書では、ユーザーがmongoimportを使用してデータをインポートすることを前提としています。

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); 
    }  
関連する問題