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