我有一个对象,其中包含使用工厂方法创建的对象数组。序列化工作正常,我可以看到对象上的所有属性,但是在反序列化时,没有设置对象数组的属性。
当文档反序列化回原始对象结构时,如何使用用于创建这些对象的工厂方法?
我尝试过像这样使用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阅读器中的数组数据。
谢谢, 约翰
答案 0 :(得分:0)
我认为问题是a.GetValue()。每个参数都必须映射回类中的属性或字段,并且GetValue()不会。 Name,IsVisible,GroupName和Priority都是可映射的,但不是GetValue(),因为它是一种方法。请记住,这是您告诉我们如何构造您的Attribute类。我们可以使用这些属性,因为我们知道它们是如何映射的。但是,在当前版本的驱动程序中映射方法是不可能的。如果您想提交映射方法的功能请求,可以在CSHARP项目下的jira.mongodb.org上进行。
克雷格