Sterownik MongoDB .NET oferuje w takich przypadkach kilka możliwości:
Polimorfizm
Możesz zbudować hierarchię klas, a sterownik MongoDB będzie w stanie określić typ obiektu, który zostanie pobrany z bazy danych:
[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; }
}
Sterownik MongoDB utworzy dodatkowe pole _t
w każdym dokumencie, który będzie reprezentował odpowiednią klasę.
Pojedyncza klasa
Nadal możesz mieć Post
klasę i użyj BsonIgnoreIfNull
atrybut, aby uniknąć wyjątku serializacji. Sterownik MongoDB .NET ustawi te właściwości na null
jeśli nie istnieją w Twojej bazie danych.
public class Post
{
[BsonId]
public string Id { get; set; }
[BsonIgnoreIfNull]
public string Message { get; set; }
[BsonIgnoreIfNull]
public string Image { get; set; }
}
BsonDokument
Możesz także porzucić podejście silnie typowane i użyć BsonDocument
klasa, która jest dynamiczną strukturą podobną do słownika, która reprezentuje twoje dokumenty Mongo
var collection = db.GetCollection<BsonDocument>("posts");
Więcej szczegółów tutaj
dynamiczny
Określanie dynamic
jako ogólny parametr ICollection
powinieneś otrzymać listę Rozwiń obiekt
który będzie zawierał wszystkie wartości, które masz w swojej bazie danych.
var collection = db.GetCollection<dynamic>("posts");
var data = collection.Find(Builders<dynamic>.Filter.Empty).ToList();
var firstMessage = data[0].Message; // dynamically typed code