Menu Docs
Página inicial do Docs
/ / /
Driver C#/ .NET
/

Operações de JSON

Neste guia, você pode aprender a criar documentos BSON, ler BSON de um arquivo e gravar BSON em um arquivo usando o driver .NET/C#.

BSON, ou Binary JSON, é o formato de dados que o MongoDB utiliza para organizar e armazenar dados. Este formato de dados inclui todos os tipos de estrutura de dados JSON e adiciona suporte para tipos incluindo datas, inteiros de tamanhos diferentes, ObjectIds e dados binários. Para obter uma lista completa dos tipos compatíveis, consulte a página de manual do servidor Tipos BSON.

As amostras de código neste guia usam o seguinte documento BSON como exemplo:

{
"address" : {
"street" : "Pizza St",
"zipcode" : "10003"
},
"coord" : [-73.982419, 41.579505]
"cuisine" : "Pizza",
"name" : "Mongo's Pizza"
}

Para construir uma representação de um documento BSON em C#, crie uma instância da classe BsonDocument. O construtor BsonDocument recebe argumentos do BsonElement que correspondem aos campos e aos valores no documento. Cada BsonElement pode ser uma instância da classe BsonElement ou um par de valor de campo entre chaves ( {} ).

A seguinte amostra de código mostra como criar um objeto BsonDocument para representar o exemplo de documento BSON. Cada par de valores-chave no objeto BsonDocument é um objeto BsonElement .

var newRestaurant = new BsonDocument
{
{ "address", new BsonDocument
{
{ "street", "Pizza St" },
{ "zipcode", "10003" }
}
},
{ "coord", new BsonArray
{-73.982419, 41.579505 }
},
{ "cuisine", "Pizza" },
{ "name", "Mongo's Pizza"}
};

A classe BsonDocument inclui métodos que permitem a você alterar o conteúdo do documento BSON. A seguinte amostra de código faz três alterações no objeto BsonDocument anterior:

  1. Adiciona um novo campo, "restaurant_id", com o valor "12345"

  2. Remove o campo "cuisine"

  3. Define o valor do campo "name" como "Mongo's Pizza Palace"

var newRestaurant = new BsonDocument
{
{ "address", new BsonDocument
{
{ "street", "Pizza St" },
{ "zipcode", "10003" }
}
},
{ "coord", new BsonArray
{-73.982419, 41.579505 }
},
{ "cuisine", "Pizza" },
{ "name", "Mongo's Pizza"}
};
newRestaurant.Add(new BsonElement("restaurant_id", "12345"));
newRestaurant.Remove("cuisine");
newRestaurant.Set("name", "Mongo's Pizza Palace");

Observação

Para obter uma lista completa dos métodos da classe BsonDocument, consulte a documentação da API.

Você pode gravar BSON em um arquivo utilizando os métodos na classe BsonBinaryWriter. Para gravar em um arquivo, execute as seguintes etapas:

  1. Abra um fluxo de arquivo para o arquivo com dados no formato BSON.

  2. Crie um BsonBinaryWriter utilizando o fluxo de arquivo.

  3. Para cada documento BSON e subdocumento que você deseja criar, chame a função WriteStartDocument().

  4. Dentro de cada documento e subdocumento BSON, chame a função WriteName() para definir o nome do campo e o método Write* apropriado para definir seu valor. Utilize o método Write* dedicado que corresponde a cada tipo de dados.

  5. Para iniciar e finalizar arrays, use WriteStartArray() e WriteEndArray().

  6. No final de cada documento e subdocumento, chame WriteEndDocument().

A seguinte amostra de código ilustra como gravar a amostra de documento BSON em myFile.bson:

string outputFileName = "myFile.bson";
using (var stream = File.OpenWrite(outputFileName))
using (var writer = new BsonBinaryWriter(stream))
{
writer.WriteStartDocument();
//address
writer.WriteName("address");
writer.WriteStartDocument();
writer.WriteName("street");
writer.WriteString("Pizza St");
writer.WriteName("zipcode");
writer.WriteString("10003");
writer.WriteEndDocument();
//coord
writer.WriteName("coord");
writer.WriteStartArray();
writer.WriteDouble(-73.982419);
writer.WriteDouble(41.579505);
writer.WriteEndArray();
//cuisine
writer.WriteName("cuisine");
writer.WriteString("Pizza");
//name
writer.WriteName("name");
writer.WriteString("Mongo's Pizza");
writer.WriteEndDocument();
}

O documento BSON resultante é apresentado assim:

{
"address" : {
"street" : "Pizza St",
"zipcode" : "10003"
},
"coord" : [-73.982419, 41.579505]
"cuisine" : "Pizza",
"name" : "Mongo's Pizza"
}

Para ler um documento BSON de um arquivo, siga estas etapas, semelhantes às usadas para gravar um documento BSON no arquivo, mas com duas diferenças:

  • Use BsonBinaryReader em vez de BsonBinaryWriter.

  • Use métodos Read* em vez de métodos Write*. Esses métodos retornam nomes de campo e valores do documento BSON.

A seguinte amostra de código mostra como ler os campos e valores a partir do documento BSON de amostra armazenado no myFile.bson:

string inputFileName = "myFile.bson";
using (var stream = File.OpenRead(inputFileName))
using (var reader = new BsonBinaryReader(stream))
{
reader.ReadStartDocument();
//address
string addressFieldName = reader.ReadName();
reader.ReadStartDocument();
string streetFieldName = reader.ReadName();
string streetValue = reader.ReadString();
string zipFieldName = reader.ReadName();
string zipValue = reader.ReadString();
reader.ReadEndDocument();
//coord
string coordFieldName = reader.ReadName();
reader.ReadStartArray();
double coord1 = reader.ReadDouble();
double coord2 = reader.ReadDouble();
reader.ReadEndArray();
//cuisine
string cuisineFieldName = reader.ReadName();
string cuisineValue = reader.ReadString();
//name
string nameFieldName = reader.ReadName();
string nameValue = reader.ReadString();
reader.ReadEndDocument();
}

Aviso

Se você chamar a função ReadName() duas vezes seguidas sem ler um valor, o driver gerará um InvalidOperationException.

Dica

Os construtores BsonBinaryReader e BsonBinaryWriter aceitam qualquer objeto System.IO.Stream . Isso significa que você pode ler ou gravar em qualquer local que possa ser acessado por um stream.

Os exemplos anteriores mostram como ler e escrever dados BSON utilizando as classes BsonBinaryReader e BsonBinaryWriter. Estas classes implementam as interfaces IBsonReader e IBsonWriter. Para ler e gravar dados em outros formatos, o driver .NET/C# fornece as seguintes implementações alternativas das interfaces IBsonReader e IBsonWriter:

  • JsonReader e JsonWriter: ler e gravar dados JSON

  • BsonDocumentReader e BsonDocumentWriter: ler e gravar dados BSON contidos em um objeto BsonDocument

Como essas classes implementam as mesmas interfaces, você pode chamar seus métodos da mesma forma que os exemplos BsonBinaryReader e BsonBinaryWriter anteriores.

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

Voltar

Document Formats

Nesta página