我有一个通用类Parameter
,其泛型属性为Value
:
abstract class Parameter<T> {
public T Value { get; set; }
}
StringParameter
类继承Parameter
类:
class StringParameter : Parameter<string> {
//...
}
是否可以正确映射StringParameter
类,使其包含通用的Value
属性?
当尝试使用下面的代码(以及其他各种方法)映射StringParameter
类时,我能做的最好的事情是获得一条消息的异常:“memberInfo参数必须是类StringParameter,但是class Parameter`1。“
BsonClassMap.RegisterClassMap<StringParameter>(cm => {
cm.AutoMap();
cm.MapMember(typeof(StringParameter).GetRuntimeProperty("Value"));
});
答案 0 :(得分:2)
将Parameter
类与指定的类型参数一起映射到每个继承它的子类,然后自动化每个子类似乎已经完成了这个技巧。
BsonClassMap.RegisterClassMap<Parameter<string>>(cm => {
cm.AutoMap();
cm.MapProperty("Value");
});
BsonClassMap.RegisterClassMap<Parameter<DateTime>>(cm => {
cm.AutoMap();
cm.MapProperty("Value");
});
BsonClassMap.RegisterClassMap<Parameter<int>>(cm => {
cm.AutoMap();
cm.MapProperty("Value");
});
BsonClassMap.RegisterClassMap<Parameter<decimal>>(cm => {
cm.AutoMap();
cm.MapProperty("Value");
});
BsonClassMap.RegisterClassMap<StringParameter>();
BsonClassMap.RegisterClassMap<DateParameter>();
BsonClassMap.RegisterClassMap<IntegerParameter>();
BsonClassMap.RegisterClassMap<DecimalParameter>();
请注意,这会将所有Parameter
类映射到具有适当鉴别符的单个集合中。