El controlador MongoDB .NET ofrece pocas posibilidades en tales casos:
Polimorfismo
Puede crear una jerarquía de clases y el controlador MongoDB podrá determinar un tipo de objeto que se recupera de la base de datos:
[BsonKnownTypes(typeof(Post), typeof(NewTypePost))]
public abstract class PostBase
{
[BsonId]
public string Id { get; set; }
}
public class Post: PostBase
{
public string Message { get; set; }
}
public class NewTypePost: PostBase
{
public string Image { get; set; }
}
El controlador MongoDB creará un campo adicional _t
en cada documento que representará la clase correspondiente.
Clase única
Todavía puedes tener Post
clase y uso BsonIgnoreIfNull
atributo para evitar la excepción de serialización. El controlador MongoDB .NET establecerá esas propiedades en null
si no existen en su base de datos.
public class Post
{
[BsonId]
public string Id { get; set; }
[BsonIgnoreIfNull]
public string Message { get; set; }
[BsonIgnoreIfNull]
public string Image { get; set; }
}
BsonDocumento
También puede eliminar el enfoque fuertemente tipado y usar BsonDocument
clase que es una estructura dinámica similar a un diccionario que representa sus documentos Mongo
var collection = db.GetCollection<BsonDocument>("posts");
Más detalles aquí
dinámico
Especificando dynamic
como parámetro genérico de ICollection
debería obtener una lista de ExpandirObjeto
que contendrá todos los valores que tiene en su base de datos.
var collection = db.GetCollection<dynamic>("posts");
var data = collection.Find(Builders<dynamic>.Filter.Empty).ToList();
var firstMessage = data[0].Message; // dynamically typed code