MongoDB错误:无法确定要为接口类型反序列化的对象的实际类型
本文关键字:对象 类型 反序列化 接口类型 错误 无法确定 MongoDB | 更新日期: 2023-09-27 18:00:09
我在C#MongoDB中尝试执行搜索查询时遇到以下错误。
MongoDB.Bson.dll中出现"System.FormatException"类型的异常,但未在用户代码中处理附加信息:反序列化类XYZ的FOMessages属性时出错:无法确定要为接口类型IXYZ反序列化的对象的实际类型。
代码:
public interface IMessage
{
MChannel Channel { get; }
}
MChannel是枚举类型
public abstract class XYZ : IXYZ
{
public List<IXYZ> FOMessages { get; set; }
}
下面是我在某种方法SearchXYZ
中的搜索查询。
MongoCursor<BsonDocument> searchMessages =
context.GetDatabase()
.GetCollection<BsonDocument>(typeof(Message).Name)
.Find(Query.And(searchMongoQuery));
return searchMessages
.ToList()
.Select(message => DeserializeToTypedObject(message, (MChannel)(int)message["Channel"]))
.ToList();
DeserializeToTypedObject
方法:
private Message DeserializeToTypedObject(BsonDocument document, MChannel channel)
{
switch (channel)
{
case MChannel.EMAIL:
return BsonSerializer.Deserialize<EmailMessage>(document);
case MChannel.SMS:
return BsonSerializer.Deserialize<SMSMessage>(document);
case MChannel.VOICE:
return BsonSerializer.Deserialize<VoiceMessage>(document);
default:
return null;
}
}
代码在方法DeserializeToTypedObject
中失败。
有线索吗?
提前感谢!!
我找到了解决方案。我们以字符串格式插入对象,因此在从mongoDB 检索时失败