MongoDB错误:无法确定要为接口类型反序列化的实际对象类型

时间:2016-08-03 08:21:27

标签: c# mongodb deserialization

尝试在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中的代码失败。

任何线索?

提前致谢!!

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。我们以字符串格式插入对象,因此从mongoDB中检索时失败了

相关问题