0

我在 Mongo-C# 环境中并使用 10Gen Mongo 驱动程序。当我尝试反序列化 Mongo 文档中的数据时,当它有一个子文档并且该子文档不是强类型时,我遇到了一个问题。换句话说,如果子文档是一个 Expando 或只是一个匿名 object() 那么它在反序列化时会给出错误,并出现以下错误:

System.IO.FileFormatException:被反序列化为 System.Object 的文档必须为空。

我们可以在 Mongo 读/写之前和之后放置一个过滤器,它将我的对象即时转换为 BSONDocument,但我认为 BSOnDocument 和(Expando 或匿名类型)之间没有可用的转换。

编写自定义反序列化工具听起来工作量太大。我只是想知道是否有人以前遇到过这个问题以及他们是如何处理这个问题的?

4

2 回答 2

1

目前,由于 10gen 驱动程序基于 .NET 3.5,我们不支持动态对象。目前,处理此问题的方法是使用 ExtraElements 成员。你可以在这里阅读:http ://www.mongodb.org/display/DOCS/CSharp+Driver+Serialization+Tutorial#CSharpDriverSerializationTutorial-Supportingextraelements 。

我们将在以后全面支持 .NET 4.0,随之而来的是对动态对象的全面支持。如果你现在真的需要这个功能,你可以在这里看到我使用另一个程序集的并行支持:https ://github.com/craiggwilson/mongo-csharp-driver/tree/dynamic 。但是,它未经测试,实际上只是一个尖峰,所以要小心。

于 2012-06-01T00:06:13.223 回答
0

如果要存储动态/匿名类型,可以使用自定义 IBsonSerializer。

有关代码示例,请参见https://stackoverflow.com/a/23244044/327825

于 2014-04-23T12:26:25.587 回答