我在Mongo-C#环境中使用10Gen Mongo驱动程序。我正在尝试反序列化Mongo文档中的数据时遇到问题,当它有一个子文档并且该子文档没有强类型时。换句话说,如果子文档是一个Expando或只是一个匿名对象(),那么它会在反序列化时出错,并出现以下错误:
System.IO.FileFormatException:要反序列化的文档 System.Object必须为空。
我可以在Mongo读/写之前和之后放置一个过滤器,它可以动态地将我的Object转换为BSONDocument,但我认为在BSOnDocument和(Expando或匿名类型)之间没有可用的转换。
编写自定义反序列化工具听起来像是太多了。我只是想知道有人在此之前遇到过这个问题以及他们如何处理这个问题?
答案 0 :(得分: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。然而,它是未经测试的,并且确实只是一个尖峰,所以要小心。
答案 1 :(得分:0)
如果要存储动态/匿名类型,可以使用自定义IBsonSerializer。
有关代码示例的信息,请参阅https://stackoverflow.com/a/23244044/327825