Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Mongo中Expando对象的反序列化_C#_Mongodb_Deserialization - Fatal编程技术网

C# Mongo中Expando对象的反序列化

C# Mongo中Expando对象的反序列化,c#,mongodb,deserialization,C#,Mongodb,Deserialization,我在Mongo-C#环境中,使用10Gen Mongo驱动程序。当我试图反序列化Mongo文档中的数据时,遇到了一个问题,因为它有一个子文档,而该子文档不是强类型的。换句话说,如果子文档是Expando或只是一个匿名对象(),则在反序列化时会出现以下错误: System.IO.FileFormatException:正在反序列化到的文档 对象必须为空 我们可以在Mongo读/写之前和之后放置一个过滤器,它可以动态地将我的对象转换为BSONDocument,但我认为BSONDocument和(Ex

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

System.IO.FileFormatException:正在反序列化到的文档 对象必须为空

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


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

目前,由于10gen驱动程序基于.NET 3.5,我们不支持动态对象。目前,处理此问题的方法是使用ExtraElements成员。您可以在此处阅读:


稍后,我们将全面支持.NET4.0,并将全面支持动态对象。如果您现在真的需要该功能,您可以在此处看到我使用另一个程序集的并行支持峰值:。但是,它还没有经过测试,实际上只是一个尖峰,所以要小心。

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


有关代码示例,请参见

我可以在这里看到您的观点。但我这里的问题是,我的模块输入基本上是一个expando对象,输出也需要expando处理。在这种情况下,尽管我最终在Mongo中保存了一个BSON文档,但我需要找出一种从Mongo到BSON以及从visa到BSON的转换机制……如果您总是使用Expandos,那么您可以创建一个自定义IBMsonSerializer来处理与Expando之间的转换。您可以使用db.GetCollection(“name”)将它们输入和输出。由于Expando实现IDictionary,因此您可以简单地将您的方法在内部推迟到DictionaryGenericSerializer。在master中,实际上有一些代码已经做到了这一点(关于IDictionary,所以您不需要它)。在此之前…尝试这样做会产生以下错误:
元素'\u id'与类System.Dynamic.ExpandoObject的任何字段或属性都不匹配。
var expando=db.GetCollection(“QueuedMessage”);var message=expando.FindOne();我试过类似的方法。
说到你发给我链接的代码。我只需要dynamicbonserializer.cs?可以调用反序列化函数吗?