我有一个用mongodump工具生成的Bson文件。我想在C#代码中反序列化。为此,似乎我可以使用mongodb C#驱动程序或Json.net库。 我尝试了他们两个,但我不能让他们工作。
使用Json.net库: “input”是Bson文件的路径
JsonSerializer serializer = new JsonSerializer();
BsonReader reader = new BsonReader(File.OpenRead(input));
serializer.Deserialize<List<Json.Profil>>(reader);
在Deserialize()上,我得到以下异常:
无法将当前JSON对象(例如{“name”:“value”})反序列化为类型'System.Collections.Generic.List`1 [MoulinetteConsole.Json.Profil]',因为该类型需要JSON数组(例如[1,2,3])正确反序列化。
要修复此错误,请将JSON更改为JSON数组(例如[1,2,3])或更改反序列化类型,使其成为普通的.NET类型(例如,不是像整数这样的基本类型,而不是可以从JSON对象反序列化的集合类型,如数组或List)。 JsonObjectAttribute也可以添加到类型中以强制它从JSON对象反序列化。
[编辑] 如果使用工具bsondump将bson导出到json文件,我得到:
{ "id" : "1",
"value" : { "foo" : null, "bar" : "test"}
}
{ "id" : "2",
"value" : { "foo" : null, "bar" : "test"}
}
此外,如果我更换:
serializer.Deserialize<List<Json.Profil>>(reader);
通过
serializer.Deserialize<Json.Profil>(reader);
我不再获得异常,但我只检索该集合的第一条记录。
答案 0 :(得分:0)
您的文件可能包含看起来像这样的Json
{
"foo":1,
"bar":"baz"
}
但是通过尝试反序列化为List<>
,反序列化器期待
[{
"foo":1,
"bar":"baz"
},
{
"foo":2,
"bar":"baz"
},
...]
只需将反序列化行更改为:
serializer.Deserialize<Json.Profil>(reader);
应该有用。
这就是错误告诉你的:
无法将当前JSON对象(例如{“name”:“value”})反序列化为类型'System.Collections.Generic.List`1 [MoulinetteConsole.Json.Profil]',因为该类型需要JSON数组(例如[1,2,3])正确反序列化。
修复此错误要么将JSON更改为JSON数组(例如[1,2,3]),要么更改反序列化类型以使其成为正常的.NET类型< / strong>(例如,不是像整数这样的基本类型,不是像数组或List 那样的集合类型),可以从JSON对象反序列化。 JsonObjectAttribute也可以添加到类型中以强制它从JSON对象反序列化。
答案 1 :(得分:0)
尝试设置BSON Reader的属性 - ReadRootValueAsArray = true