2012-02-28 16 views
18

¿Cómo deserializo un objeto BsonDocument a la clase después de obtenerlo del servidor?Cómo deserializar un objeto BsonDocument a la clase

QueryDocument _document = new QueryDocument("key", "value"); 
MongoCursor<BsonDocument> _documentsReturned = _collection.FindAs<BsonDocument>(_document); 

foreach (BsonDocument _document1 in _documentsReturned) 
{ 
    //deserialize _document1 
    //? 
} 

¿Deserializo utilizando un BsonReader?

Respuesta

50

Hay tres maneras realidad:

tipo 1.Specify que desea cargar directamente en FindAs<> documento

var docs = _collection.FindAs<MyType>(_document); 

2.Deserialize través BsonSerializer:

BsonSerializer.Deserialize<MyType>(doc); 

3.Map BSON documento de forma manual a su clase:

var myClass = new Mytype(); 
myClass.Name = bsonDoc["name"].AsString; 

Para la mayoría de los casos, está bien con el primer acercamiento. Pero a veces, cuando sus documentos no están estructurados, es posible que necesite un tercer enfoque.

+0

Se produjo un error al deserializar la propiedad Property1 de la clase Class1: ReadString solo se puede invocar cuando CurrentBsonType es String, no cuando CurrentBsonType es ObjectId. Puse el objeto Bson como guía de la clase y mapeé la clase. ¿Cómo debo solucionar esto? – iefpw

+0

@iefpw: El error indica que tiene diferentes tipos de Property1 en la base de datos y en la clase (objectId en la base de datos y string en la clase). –

+0

Estaba tratando de deserializar a la clase incorrecta. Agregue "Object Id Id {get; set;} a la clase y, básicamente, todo funciona sin asignación de clase. – iefpw

Cuestiones relacionadas