Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/ / /
Driver C#/ .NET
/

Serialização

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.

Dica

Serialização

Para saber mais sobre serialização, consulte o artigoSerialização na Wikipedia.

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.

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.

Em alguns casos, talvez seja necessário criar um serializador personalizado. Ao criar um serializador personalizado, implemente a classe de base abstrata SerializerBase<T> e substitua os métodos Deserialize() e Serialize().

O exemplo de código a seguir mostra um serializador BsonRegularExpression personalizado:

class CustomRegularExpressionSerializer : SerializerBase<Regex>
{
public override Regex Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
{
var type = context.Reader.GetCurrentBsonType();
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 override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, Regex value)
{
context.Writer.WriteRegularExpression(value);
}
}

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.

A interface IBsonIdProvider fornece os GetDocumentId() SetDocumentId() métodos e e é útil se o objeto que você está serializando usa um _id tipo diferente ObjectId de.

A implementação da interface IBsonDocumentSerializer permite que o driver acesse as informações do 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.

A implementação da interface IBsonArraySerializer permite que o driver acesse informações de serialização para itens individuais em uma array.

Você pode melhorar o desempenho do seu aplicativo representando matrizes de primitivos como estruturasMemória<T> eReadOnlyMemory em vez de usar tipos como matrizes C# padrão ou<T> BsonArray objetos . O driver implementa caminhos rápidos de serialização e desserialização Memory<T> para ReadOnlyMemory<T> e, o que aumenta a velocidade e reduz o uso da memória.

Observação

As verificações de truncamento e transbordamento não são suportadas para Memory<T> ou ReadOnlyMemory<T>, mas essas verificações são implementadas para arrays padrão.

Você pode efetuar essas melhorias de desempenho armazenando os seguintes tipos primitivos em estruturas Memory<T> ou ReadOnlyMemory<T>:

  • bool

  • sbyte

  • byte

  • char

  • short

  • ushort

  • int

  • uint

  • long

  • ulong

  • float

  • double

  • decimal

O exemplo a seguir define um Line POCO que contém campos de array modelados pelas estruturas Memory e ReadOnlyMemory:

public class Line
{
public ObjectId Id { get; set; }
public Memory<int> X { get; set; }
public ReadOnlyMemory<float> Y { get; set; }
}

O documento a seguir representa como um objeto Line de amostra é representado no MongoDB:

{
"_id": ...,
"X": [ 1, 2, 3, 4, 5 ],
"Y": [ 1, 1.409999966621399, 1.7300000190734863, 2, 2.240000009536743 ]
}

Para saber mais sobre como usar o driver .NET/C# para serializar objetos C#, consulte as seguintes páginas:

  • Mapeamento de classe

  • POCOs

  • Objetos polimórficos

  • GUIDs

Para saber mais sobre qualquer um dos métodos ou tipos discutidos neste guia, consulte a seguinte documentação da API:

Voltar

Query

Nesta página