2016-08-03 24 views
0

Ich erhalte den folgenden Fehler, wenn ich versuche, eine Suchabfrage in C# MongoDB auszuführen.MongoDB-Fehler: Der tatsächliche Typ des zu deserialisierenden Objekts für den Schnittstellentyp konnte nicht ermittelt werden

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.

Der Code:

public interface IMessage 
{ 
    MChannel Channel { get; } 
} 

MChannel ist Aufzählungstyp.

public abstract class XYZ : IXYZ 
{ 
    public List<IXYZ> FOMessages { get; set; } 
} 

Unten ist meine Suchabfrage in irgendeiner Methode 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(); 

Die DeserializeToTypedObject Methode:

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; 
     } 
    } 

Der Code wird in dem Verfahren versagt DeserializeToTypedObject.

Irgendwelche Hinweise?

Vielen Dank im Voraus!

Antwort

0

Ich fand die Lösung. Wir haben das Objekt im String-Format eingefügt, so dass es beim Abrufen von mongoDB

fehlgeschlagen ist