Serialização
Nesta página
Visão geral
Neste guia, você pode aprender a usar o driver MongoDB .NET/C# para realizar a serialização. Serialização é o processo de mapeamento de um objeto C# em um documento BSON para armazenamento no MongoDB.
Serializadores
Os serializadores são classes que lidam com a tradução de objetos C# de e para documentos BSON. Os serializadores implementam a interface IBsonSerializer
. O driver .NET/C# tem muitos serializadores integrados feitos para lidar com tipos primitivos, tipos de collection e classes personalizadas.
Para obter uma lista completa dos serializadores disponíveis, consulte a documentação da API do namespace Serializadores.
SerializerRegistry
O registro de serializadores contém todos os serializadores registrados que estão disponíveis para o seu aplicativo. Muitos dos serializadores incorporados são registrados automaticamente no registro de serializadores durante a inicialização do aplicativo. No entanto, antes de usar um serializador personalizado, você deve adicioná-lo ao registro do serializador, conforme mostrado no exemplo a seguir:
BsonSerializer.RegisterSerializer(new CustomTypeSerializer());
Para acessar o registro do serializador, use a propriedade SerializerRegistry
da classe BsonSerializer
da seguinte maneira:
var intSerializer = BsonSerializer.SerializerRegistry.GetSerializer<int>();
Importante
O registro do serializador é um registro global. Ou seja, não é possível usar vários registros em um único aplicativo.
Serializadores personalizados
Para criar seu próprio serializador personalizado, implemente a classe base IBsonSerializer
, defina o membro ValueType
e substitua os métodos Deserialize()
e Serialize()
.
O exemplo de código a seguir mostra um serializador BsonRegularExpression
personalizado:
class CustomRegularExpressionSerializer : IBsonSerializer { public Type ValueType => typeof(Regex); public object Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args) { var type = context.Reader.CurrentBsonType; switch (type) { case BsonType.RegularExpression: return context.Reader.ReadRegularExpression().AsRegex; case BsonType.String: var pattern = context.Reader.ReadString() return new Regex(pattern); default: throw new NotSupportedException($"Cannot convert a {type} to a RegularExpression."); } } public void Serialize(BsonSerializationContext context, BsonSerializationArgs args, object value) { var regex = (Regex) value; context.Writer.WriteRegularExpression(regex); } }
Interfaces Opt-in
O driver .NET/C# tem várias interfaces opcionais que sua classe de serializador personalizado pode implementar, dependendo do tipo de dados que o serializador manipula.
IBsonIdProvider
O IBsonIdProvider interface fornece os GetDocumentId()
SetDocumentId()
métodos e , e é útil se o objeto que você está serializando usa um _id
tipo diferente de ObjectId
.
IBsonDocumentSerializer
Implementando o IBsonDocumentSerializer permite que o driver acesse as informações de membro do objeto que você está serializando. Isso permite que o driver construa corretamente queries seguras contra erros de digitação ao usar um serializador personalizado.
IBsonArraySerializer
Implementando o IBsonArraySerializer permite que o driver acesse informações de serialização para itens individuais em uma array.
Informações adicionais
Para saber mais sobre como usar o driver .NET/C# para serializar objetos C#, consulte as seguintes páginas:
Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API: