我有一个实现ICollection<T>
接口的类:
class Test : ICollection<string>
{
[BsonElement("items")]
private List<string> _items;
[BsonElement("someOtherProp")]
public bool SomeOtherProperty { get; set; }
// ...ICollection<string> impl
}
默认情况下,它使用ArraySerializer
类进行(反)序列化,因此忽略任何其他属性或字段(甚至是公共和BsonElement
属性修饰)。
有谁知道如何强制我的课程作为常规课程进行反序列化?
答案 0 :(得分:0)
好吧,好像我找到了解决方案。您可以在应用程序启动时执行此操作:
BsonSerializer.RegisterSerializer(
typeof(Test),
new BsonClassMapSerializer(BsonClassMap.LookupClassMap(typeof(Test))));
我不确定,但它可能与BsonClassMap.RegisterClassMap(...)
方法调用冲突(即方法调用顺序可能很重要) - 我没有检查出来。请注意,此类注册对于整个应用程序域都是全局的。如果它不合适,事情会变得更棘手,因为你不能用BsonClassMapSerializer
属性装饰你的类属性。但这是我停止我的小研究的地方,因为我实现了我的目标。
我希望有人会觉得这个答案很有用!