2016-12-02 82 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); 
    }  
相关问题