使用工厂方法反序列化对象

时间:2015-06-09 15:13:53

标签: c# mongodb

我有一个对象,其中包含使用工厂方法创建的对象数组。序列化工作正常,我可以看到对象上的所有属性,但是在反序列化时,没有设置对象数组的属性。

当文档反序列化回原始对象结构时,如何使用用于创建这些对象的工厂方法?

我尝试过像这样使用MapCreator:

BsonClassMap.RegisterClassMap<Attribute>(cm =>
            {
                cm.AutoMap();
                cm.MapCreator(a => Attribute.Create(a.Name, a.GetValue(), a.IsVisible, a.GroupName, a.Priority));
            });

但我得到以下例外:

[MongoDB.Bson.BsonSerializationException] = {&#34; prototype参数允许的唯一操作是访问字段或属性。&#34;}

如果我需要创建自定义序列化程序,我不知道如何反序列化对象数组,如何遍历bson阅读器中的数组数据。

谢谢, 约翰

1 个答案:

答案 0 :(得分:0)

我认为问题是a.GetValue()。每个参数都必须映射回类中的属性或字段,并且GetValue()不会。 Name,IsVisible,GroupName和Priority都是可映射的,但不是GetValue(),因为它是一种方法。请记住,这是您告诉我们如何构造您的Attribute类。我们可以使用这些属性,因为我们知道它们是如何映射的。但是,在当前版本的驱动程序中映射方法是不可能的。如果您想提交映射方法的功能请求,可以在CSHARP项目下的jira.mongodb.org上进行。

克雷格