无法在 MongoDB 的 Find 语句中反序列化子类

本文关键字:语句 反序列化 子类 Find MongoDB | 更新日期: 2023-09-27 18:33:32

我有这个类

public class TestClass
{
     public DateTime date;
     public ObjectId _id;
     public GeoJsonGeometry<GeoJson2DCoordinates> loc;
}

当我将数据插入MongoDB时,它工作得很好!当我读取数据时,我收到一个异常,指出子类 TestClass.loc 无法反序列化。

如果我在不检索 loc 属性的情况下执行 find 语句,则代码有效。

我究竟如何反序列化子类?

谢谢!

无法在 MongoDB 的 Find 语句中反序列化子类

GeoJsonGeometry是一个抽象类。您不能实例化抽象类(反序列化程序不知道序列化的原始类型,因为它没有存储在 BSON 文档中)。

最简单的解决方案是使用更具体的类型,例如GeoJsonPoint

或者,您可以研究如何编写自定义序列化程序,如此处所述。

我通过编写自己的序列化程序来修复它。因为我想使用抽象类,这就是我写的。

public override object Deserialize(BsonReader bsonReader, Type nominalType, Type actualType, IBsonSerializationOptions options)
{
    return new GeoJsonObjectSerializer<T>().Deserialize(bsonReader, nominalType, options):
}