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

Operações de JSON

Nesta página

  • Visão geral
  • Formato de dados JSON
  • Crie um documento BSON
  • Altere um documento BSON
  • Grave BSON em um arquivo
  • Leia BSON de um arquivo
  • Documentação da API

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 BSON Types.

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 um documento BSON em C#, crie uma instância da classe BsonDocument. O construtor BsonDocument recebe argumentos do BsonElement que correspondem aos campos e seus 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. Cada tipo de dados possui um método Write* dedicado que você deve usar.

  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.

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

Voltar

LINQ