我在虚拟机上有一个MongoDB实例,可以使用Compass进行连接。我已使用命令行在该虚拟机上手动上传了JSON文件,没有问题。导入将创建两个文档,并可以使用命令行按预期工作:
mongoimport --jsonArray --db Historian_ManyDocs --collection TagValues --file historianData1.json
json在historianData1.json文件中具有以下格式:
[
{
"tagname": "99CalcTrigger",
"engunits": "",
"value": "2",
"quality": "Good NonSpecific",
"timestamp": "2018-12-13T10:45:05Z"
},
{
"tagname": "Blank",
"engunits": "",
"value": "0",
"quality": "Good NonSpecific",
"timestamp": "2018-12-13T10:45:00Z"
}
]
我想在某种程度上实现此过程的自动化,并且我一直在与c#一起使用以下代码来做到这一点:
string line;
using (StreamReader reader = new StreamReader(@"C:\historianData1.json")){
line = reader.ReadLine();
}
var client = new MongoClient("mongodb://mongoserverIP:27017");
var database = client.GetDatabase("Historian_ManyDocs");
dynamic array = Newtonsoft.Json.JsonConvert.DeserializeObject(line);
foreach (var item in array)
{
var document = BsonSerializer.Deserialize<BsonDocument>(item);
var collection = database.GetCollection<BsonDocument>("TagValues");
await collection.InsertOneAsync(document);
}
此错误,并在var document
行上显示以下错误,并显示以下错误:
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:'最好的 重载方法匹配 'MongoDB.Bson.Serialization.BsonSerializer.Deserialize(MongoDB.Bson.BsonDocument, System.Action)' 有一些无效的参数”
任何人都可以提供一些建议,因为我已经进行了4个小时了。
答案 0 :(得分:1)
您必须在MonngoDB中插入一个POCO类,所以请像这样创建它:
public class POCOData
{
public string tagname;
public string engunits;
public string value;
public string quality;
public TimeOffset timestamp;
}
在Deserialize
中可以使用它之后:
foreach (var item in array)
{
var document = BsonSerializer.Deserialize<POCOData>(item);
var collection = database.GetCollection<BsonDocument>("TagValues");
await collection.InsertOneAsync(document);
}