using MongoDB.Bson;
using MongoDB.Driver;
protected static IMongoClient client;
protected static IMongoDatabase db;
public async void Insert()
{
client = new MongoClient();
db = client.GetDatabase("Database");
string json = "[";
foreach (CsvObjects.Connections e in connectionsList)
{
json += "{";
json += "\"DateTime\":\"" + e.DateTime + "\",";
json += "\"Value\":\"" + e.Value + "\",";
json += "},";
}
json += "]";
MongoDB.Bson.BsonDocument document = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<BsonDocument>(json);
var collection = db.GetCollection<BsonDocument>("data");
await collection.InsertOneAsync(document);
我创建了一个arylylist,其中包含我要插入mongodb的数据,我尝试使用insertOneAsync方法生成一个json并插入它,但是我得到了反序列化错误。可能有一种更简单的方法可以做到这一点,但我不知道如何。
我尝试了一些关于这个主题的其他stackoverflow线程,但没有用。
&#34;无法反序列化&#39; BsonDocument&#39;来自BsonType&#39; Array&#39;&#34;
答案 0 :(得分:1)
您可能甚至不必创建JSON字符串,除了它很容易出错。例如,您可以使用MongoDB.Bson中的ToBsonDocument扩展名。
using MongoDB.Bson;
using MongoDB.Driver;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Example
{
class FooItem
{
public DateTime DateTime { get; set; }
public string Value { get; set; }
}
class InsertTest
{
protected static IMongoClient _client;
protected static IMongoDatabase _db;
static void Main(string[] args)
{
_client = new MongoClient();
_db = _client.GetDatabase("Database");
MainAsync(args).GetAwaiter().GetResult();
}
static IEnumerable<FooItem> GetList()
{
yield return new FooItem
{
DateTime = DateTime.Now,
Value = "I am foo 1"
};
yield return new FooItem
{
DateTime = DateTime.Now,
Value = "I am foo 2"
};
}
static async Task MainAsync(string[] args)
{
var collection = _db.GetCollection<BsonDocument>("data");
foreach (var item in GetList())
{
await collection.InsertOneAsync(item.ToBsonDocument());
}
}
}
}
这会产生此结果
{ "_id" : ObjectId("565e70208af88628ecb3237d"), "DateTime" : ISODate("2015-12-02T04:14:24.789Z"), "Value" : "I am foo 1" }
{ "_id" : ObjectId("565e70228af88628ecb3237e"), "DateTime" : ISODate("2015-12-02T04:14:26.511Z"), "Value" : "I am foo 2" }
答案 1 :(得分:0)
从错误消息中,您尝试将JSON文档的反序列化和数组放入单个文档中。
相反,要么在foreach循环中执行Deserialize和InsertOneAsync,要么创建另一个循环,一次插入1个文档。
另外,使用StringBuilder类! string是不可变的,因此对于connectionsList中的每个项目,您当前的代码正在创建2n + 2个字符串!
答案 2 :(得分:-1)
await collection.InsertOneAsync(item.ToBsonDocument());
&#34;等待&#34;是关键字,如果不是初始化的地方