2016-08-03 84 views
0

尝试在C#MongoDB中执行搜索查询时出现以下错误。MongoDB错误:无法确定要反序列化的接口类型的对象的实际类型

An exception of type 'System.FormatException' occurred in MongoDB.Bson.dll but was not handled in user code Additional information: An error occurred while deserializing the FOMessages property of class XYZ: Unable to determine actual type of object to deserialize for interface type 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失败。

任何线索?

在此先感谢!

回答

0

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

相关问题