【问题标题】:Cannot deserialize a 'BsonDocument from BsonType 'Array'无法从 BsonType 'Array' 反序列化 'BsonDocument
【发布时间】:2017-05-02 05:27:09
【问题描述】:

正在尝试运行以下代码:

var doc = BsonDocument.Parse(rawjson);

rawjson 在哪里:

[{"PersonName":"Jim Test"}]

返回以下错误:

Cannot deserialize a 'BsonDocument' from BsonType 'Array'.

根据大多数在线 json 验证器,rawjson 似乎是有效的。还有其他方法可以使用 Mongodb C# 驱动程序将其解析为 BsonDocument 吗?

【问题讨论】:

    标签: c# json mongodb


    【解决方案1】:

    由于您没有准确说明 rawjson 的数据类型,我假设您的意思是字符串。

    BsonDocument.Parse() 方法的手册指定它接受string 作为参数。

    您的“原始 json”也可以是 JSON 文档的字符串:

    var rawjson = "{'PersonName': 'Jim Test'}";
    Console.WriteLine(BsonDocument.Parse(rawjson));
    

    或者,它可以是字符串格式的 JSON 文档数组:

    string[] rawjson = { "{'PersonName': 'Jim Test'}" };
    Console.WriteLine(BsonDocument.Parse(rawjson[0]));
    

    或者,如果您的原始 json 字符串实际上是数组文档字符串的形式:

    var rawjson = "[{'PersonName': 'Jim Test'}]";
    
    string[] separatingChars = { "[", ",", "]" };  // split on these chars
    string[] docs = rawjson.Split(separatingChars, System.StringSplitOptions.RemoveEmptyEntries );  
    
    foreach (string doc in docs) {
        Console.WriteLine(BsonDocument.Parse(doc));
    }
    

    【讨论】:

    • 我在帖子中提到原始 json 是:[{"PersonName":"Jim Test"}] 希望有一个不涉及进行字符替换的解决方案,因为将来可能会变得混乱潜在的。不过谢谢你。似乎您可以将其序列化为 List 所以也许有一种方法可以将 List 合并到单个 BsonDocument?
    • @PaulW。抱歉澄清一下,我的意思是{"PersonName":"Jim Test"} 的数据类型。它是自定义对象,还是Dictionary,还是Json.NET?将 BsonDocument 数组合并到单个 BsonDocument 的一种方法是嵌套它。即{ foo: [ {PersonName:"A"}, {PersonName: "B"} ] }。您介意分享您如何获得价值,以及您正在尝试做什么吗?干杯。
    • 对象是 List 但如果需要我们也可以使用 Dictionary 甚至类似 mongo BsonDocument 的东西。它是我们提前不知道的原始 json,因此不能像您通常那样拥有一个设置的 C# 类对象。您描述的嵌套大致就是我们正在寻找的。​​span>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    相关资源
    最近更新 更多