在MongoDB C#驱动程序中将数组序列化为文档

本文关键字:数组 序列化 文档 MongoDB 驱动程序 | 更新日期: 2023-09-27 18:29:16

我有一个实现ICollection<T>接口的类:

class Test : ICollection<string>
{
    [BsonElement("items")]
    private List<string> _items;
    [BsonElement("someOtherProp")]
    public bool SomeOtherProperty { get; set; }
    // ...ICollection<string> impl
}

默认情况下,它是使用ArraySerializer类进行(反)序列化的,因此任何其他属性或字段(甚至是用BsonElement属性修饰的公共和字段)都将被忽略。

有人知道我如何强制将我的类反序列化为常规类吗?

在MongoDB C#驱动程序中将数组序列化为文档

好吧,我似乎找到了一个解决方案。您可以在应用程序启动时执行此操作:

BsonSerializer.RegisterSerializer(
    typeof(Test), 
    new BsonClassMapSerializer(BsonClassMap.LookupClassMap(typeof(Test))));

我不确定,但它可能与BsonClassMap.RegisterClassMap(...)方法调用冲突(即方法调用顺序可能很重要)——我没有检查过。请注意,此类注册对于整个应用程序域是全局的。如果不合适,事情会变得更加棘手,因为您不能仅仅用BsonClassMapSerializer属性来装饰类属性。但这就是我停止小研究的地方,因为我实现了我的目标。

我希望有人会发现这个答案有帮助!