无法在 C# 中将 BsonArray 转换为 BsonDocument
Cannot convert BsonArray to BsonDocument in c#
我的 Json 字符串为
string myjson = "[
{
"col1": "1",
"col2": "2",
"col3": "3"
},
{
"col1": "4",
"col2": "5",
"col3": "6"
},
{
"col1": "7",
"col2": "8",
"col3": "9"
}]";
问题是:当我创建 bson 文档时它显示
Cannot convert BsonArray to BsonDocument
这就是我创建 BsonDocument 的方式:
BsonDocument doc = BsonSerializer.Deserialize<BsonDocument>(myjson);
我该怎么办?
BsonDocument doc = new BsonDocument();
BsonArray array = BsonSerializer.Deserialize<BsonArray>(myjson);
doc.Add(array);
我没试过,但应该可以。
编辑:
string myjson1 = "{ 'col1': '1', 'col2': '2', 'col3': '3'}";
string myjson2 = "{ 'col1': '4', 'col2': '5', 'col3': '6'}";
string myjson3 = "{'col1': '7', 'col2': '8', 'col3': '9'}";
BsonArray arr = new BsonArray();
arr.Add(BsonSerializer.Deserialize<BsonDocument>(myjson1));
arr.Add(BsonSerializer.Deserialize<BsonDocument>(myjson2));
arr.Add(BsonSerializer.Deserialize<BsonDocument>(myjson3));
或者只在文档中包含一个 values
元素,如下所示:
string myjson = "[ { 'col1': '1', 'col2': '2', 'col3': '3'},{ 'col1': '4', 'col2': '5', 'col3': '6'},{'col1': '7', 'col2': '8', 'col3': '9'}]";
var doc = new BsonDocument {
{ "values", BsonSerializer.Deserialize<BsonArray>(myjson) }
};
我能做的最好的就是这个。
您可以尝试将 BsonArray 转换为 BsonValue 数组,然后遍历该数组:
var a = BsonSerializer.Deserialize<BsonArray>(yourjsontext).ToArray();
for (int i = 0; i < a.Length; i++) {
var document = a[i].ToBsonDocument();
// Do whatever necessary
}
或者更简洁的方式:
var arrayDocs = BsonSerializer.Deserialize<BsonArray>(myJsonArrayString);
var documents = arrayDocs.Select(val => val.AsBsonDocument);
这会给你一个 IEnumerable<BsonDocument>
我的 Json 字符串为
string myjson = "[
{
"col1": "1",
"col2": "2",
"col3": "3"
},
{
"col1": "4",
"col2": "5",
"col3": "6"
},
{
"col1": "7",
"col2": "8",
"col3": "9"
}]";
问题是:当我创建 bson 文档时它显示
Cannot convert BsonArray to BsonDocument
这就是我创建 BsonDocument 的方式:
BsonDocument doc = BsonSerializer.Deserialize<BsonDocument>(myjson);
我该怎么办?
BsonDocument doc = new BsonDocument();
BsonArray array = BsonSerializer.Deserialize<BsonArray>(myjson);
doc.Add(array);
我没试过,但应该可以。
编辑:
string myjson1 = "{ 'col1': '1', 'col2': '2', 'col3': '3'}";
string myjson2 = "{ 'col1': '4', 'col2': '5', 'col3': '6'}";
string myjson3 = "{'col1': '7', 'col2': '8', 'col3': '9'}";
BsonArray arr = new BsonArray();
arr.Add(BsonSerializer.Deserialize<BsonDocument>(myjson1));
arr.Add(BsonSerializer.Deserialize<BsonDocument>(myjson2));
arr.Add(BsonSerializer.Deserialize<BsonDocument>(myjson3));
或者只在文档中包含一个 values
元素,如下所示:
string myjson = "[ { 'col1': '1', 'col2': '2', 'col3': '3'},{ 'col1': '4', 'col2': '5', 'col3': '6'},{'col1': '7', 'col2': '8', 'col3': '9'}]";
var doc = new BsonDocument {
{ "values", BsonSerializer.Deserialize<BsonArray>(myjson) }
};
我能做的最好的就是这个。
您可以尝试将 BsonArray 转换为 BsonValue 数组,然后遍历该数组:
var a = BsonSerializer.Deserialize<BsonArray>(yourjsontext).ToArray();
for (int i = 0; i < a.Length; i++) {
var document = a[i].ToBsonDocument();
// Do whatever necessary
}
或者更简洁的方式:
var arrayDocs = BsonSerializer.Deserialize<BsonArray>(myJsonArrayString);
var documents = arrayDocs.Select(val => val.AsBsonDocument);
这会给你一个 IEnumerable<BsonDocument>