无法在 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 语句,则代码有效。
我究竟如何反序列化子类?
谢谢!
GeoJsonGeometry
是一个抽象类。您不能实例化抽象类(反序列化程序不知道序列化的原始类型,因为它没有存储在 BSON 文档中)。
最简单的解决方案是使用更具体的类型,例如GeoJsonPoint
。
或者,您可以研究如何编写自定义序列化程序,如此处所述。
我通过编写自己的序列化程序来修复它。因为我想使用抽象类,这就是我写的。
public override object Deserialize(BsonReader bsonReader, Type nominalType, Type actualType, IBsonSerializationOptions options)
{
return new GeoJsonObjectSerializer<T>().Deserialize(bsonReader, nominalType, options):
}