Mjo*_*nir 5 c# serialization json mongodb
我有一个使用 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);
Run Code Online (Sandbox Code Playgroud)
在 Deserialize() 上,出现以下异常:
无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Collections.Generic.List`1[MoulinetteConsole.Json.Profil]',因为该类型需要 JSON 数组(例如 [1, 2,3])以正确反序列化。
要修复此错误,请将 JSON 更改为 JSON 数组(例如 [1,2,3])或更改反序列化类型,使其成为普通的 .NET 类型(例如,不是像整数这样的原始类型,不是像这样的集合类型)数组或列表),可以从 JSON 对象反序列化。还可以将 JsonObjectAttribute 添加到类型中以强制其从 JSON 对象反序列化。
[编辑]如果使用工具 bsondump 将 bson 导出到 json 文件,我得到:
{ "id" : "1",
"value" : { "foo" : null, "bar" : "test"}
}
{ "id" : "2",
"value" : { "foo" : null, "bar" : "test"}
}
Run Code Online (Sandbox Code Playgroud)
此外,如果我替换:
serializer.Deserialize<List<Json.Profil>>(reader);
Run Code Online (Sandbox Code Playgroud)
经过
serializer.Deserialize<Json.Profil>(reader);
Run Code Online (Sandbox Code Playgroud)
我不再遇到异常,但我只检索集合的第一条记录。
您的文件可能包含如下所示的 Json
{
"foo":1,
"bar":"baz"
}
Run Code Online (Sandbox Code Playgroud)
但通过尝试反序列化List<>,反序列化器期望
[{
"foo":1,
"bar":"baz"
},
{
"foo":2,
"bar":"baz"
},
...]
Run Code Online (Sandbox Code Playgroud)
只需将反序列化行更改为:
serializer.Deserialize<Json.Profil>(reader);
Run Code Online (Sandbox Code Playgroud)
应该管用。
这就是错误告诉您的内容:
无法将当前 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 对象反序列化。