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.
Convenções
Os pacotes de convenções permitem definir e aplicar convenções às suas classes e seus membros que o driver usa durante a serialização. As convenções especificam como os dados são mapeados entre seus objetos C# e documentos MongoDB sem exigir que você decore cada classe com atributos.
O driver .NET/C# fornece convenções internas que você pode usar para personalizar o processo de serialização . A tabela a seguir descreve algumas das convenções integradas:
Convenção | Descrição |
---|---|
Converte nomes de elementos em camel case durante a serialização e desserialização. | |
Converte valores de enumeração em uma representação especificada durante a serialização e desserialização. | |
Especifica se os elementos extras em um documento devem ser ignorados durante a desserialização. | |
Especifica quais tipos podem ser serializados usando um serializador de objeto . |
Para visualizar uma lista completa de convenções disponíveis, consulte a referência da classe Convenções na documentação da API.
Você pode registrar uma convenção instanciando um ConventionPack
com as convenções especificadas e, em seguida, passando-a para o método ConventionRegistry.Register()
, conforme mostrado no exemplo a seguir:
var camelCaseConvention = new ConventionPack { new CamelCaseElementNameConvention() }; ConventionRegistry.Register("CamelCaseConvention", camelCaseConvention, t => true);
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: