"Grandes são as
obras do Senhor, procuradas por todos os que
nelas tomam prazer."
Salmos 111:2
C# - Realizando operações
CRUD em arquivos JSON
![]() |
Hoje veremos realizar operações CRUD em arquivos JSON usando a linguagem C#. |
Na linguagem C# podemos usar a biblioteca .NET que inclui os recursos para serializar e deserializar JSON no assembly System.Web.Extensions.
Neste artigo vamos usar os recursos existentes nesse assembly para ler e excrever no formato JSON.
o JSON [JavaScript Object Notation] é um subconjunto de JavaScript e é um formato de troca de dados muito leve. Dependendo do cenário podemos até usar esse tipo de armazenamento em um projeto de onde podemos acessar os dados muito rapidamente.
Nessa abordagem
não queremos criar uma conexão e verificar a disponibilidade da conexão, e não
queremos depender de outro servidor, pois isso é demorado.
Por exemplo, se um projeto não tiver conectividade de banco de dados e quiser
armazenar informações de usuário, usando essa abordagem podemos usar um arquivo
JSON para armazenar esses dados.
Portanto, neste artigo veremos uma forma de implementar tal abordagem executando operações CRUD em arquivos JSON e usar arquivos JSON como um banco de dados.
A título de exemplo vamos usar um arquivo no formato JSON chamado usuario.json com o seguinte código:
{ "id": 123, "nome": "Jose Carlos Macoratti", "endereco": { "rua": "Rua Mirassol, 100", "cidade": "Campinas", "cep": 13095014 }, "experiencias": [ { "empresaid": 22, "empresanome": "Microsoft" }, { "empesaid": 54, "empersanamo": "JcmSoft" }, { "empresaid": 67, "empresanome": "IncSoft" } ], "telefone": 123464422, "cargo": "Desenvolvedor C#" } |
Acessando o site jsoneditoronline.org podemos ter uma visualização melhor da estrutura do arquivo:
Este arquivo possui informação de usuário como : id, nome, endereço, experiências, etc.
A seguir vamos criar uma aplicação Console e realizar as operações CRUD neste arquivo.
Criando o projeto no VS 2017 Community
Usando o Visual Studio 2017 Community no menu File clique em New Project;
A seguir selecione Visual C# -> Windows Desktop;
Selecione o template Console App(.NET Framework);
Informe um nome a seu gosto. Para o exemplo vou informar Crud_JSON;
Crie uma pasta chamada Dados e nesta pasta inclua o arquivo usuario.json.
Vamos criar uma classe chamada JsonCrud no projeto que vai conter os métodos para gerenciar as informações do arquivo
Abaixo temos o código desta classe:
using Newtonsoft.Json.Linq;
using System;
using System.IO;
using System.Linq;
using static System.Console;
namespace Crud_JSON
{
public class JsonCrud
{
public void DetalhesdoUsuario(string arquivoJson)
{
var json = File.ReadAllText(arquivoJson);
try
{
var jObject = JObject.Parse(json);
if (jObject != null)
{
WriteLine("ID :" + jObject["id"].ToString());
WriteLine("Nome :" + jObject["nome"].ToString());
var endereco = jObject["endereco"];
WriteLine("Rua :" + endereco["rua"].ToString());
WriteLine("Cidade :" + endereco["cidade"].ToString());
WriteLine("Cep :" + endereco["cep"]);
JArray arrayExperiencias = (JArray)jObject["experiencias"];
if (arrayExperiencias != null)
{
WriteLine("Empresas");
foreach (var item in arrayExperiencias)
{
WriteLine("\tId :" + item["empresaid"]);
WriteLine("\tEmpresa :" + item["empresanome"].ToString());
}
}
WriteLine("Telefone :" + jObject["telefone"].ToString());
WriteLine("Cargo :" + jObject["cargo"].ToString());
}
}
catch (Exception)
{
throw;
}
}
//incluir empresa
public void AdicionarEmpresa(string arquivoJson)
{
WriteLine("Informe o Id da empresa : ");
var empresaId= Console.ReadLine();
WriteLine("\nQual o nome da Empresa : ");
var nomeEmpresa = Console.ReadLine();
var novaEmpresaMembro = "{ 'empresaid': " + empresaId + ", 'empresanome': '" + nomeEmpresa + "'}";
try
{
var json = File.ReadAllText(arquivoJson);
var jsonObj = JObject.Parse(json);
var arrayExperiencias = jsonObj.GetValue("experiencias") as JArray;
var novaEmpresa = JObject.Parse(novaEmpresaMembro);
arrayExperiencias.Add(novaEmpresa);
jsonObj["experiencias"] = arrayExperiencias;
string novoJsonResult = Newtonsoft.Json.JsonConvert.SerializeObject(jsonObj,
Newtonsoft.Json.Formatting.Indented);
File.WriteAllText(arquivoJson, novoJsonResult);
}
catch (Exception ex)
{
WriteLine("Erro ao adicionar : " + ex.Message.ToString());
}
}
//deletar empresa
public void DeletarEmpresa(string arquivoJson)
{
var json = File.ReadAllText(arquivoJson);
try
{
var jObject = JObject.Parse(json);
JArray arrayExperiencias = (JArray)jObject["experiencias"];
Write("Informe o ID da Empresa a deletar : ");
var empresaId = Convert.ToInt32(Console.ReadLine());
if (empresaId > 0)
{
var nomeEmpresa = string.Empty;
var empresaADeletar = arrayExperiencias.FirstOrDefault(obj =>
obj["empresaid"].Value<int>() == empresaId);
arrayExperiencias.Remove(empresaADeletar);
string saida = Newtonsoft.Json.JsonConvert.SerializeObject(jObject,
Newtonsoft.Json.Formatting.Indented);
File.WriteAllText(arquivoJson, saida);
}
else
{
Write("O ID da empresa é inválido, tente novamente!");
AtualizarEmpresa(arquivoJson);
}
}
catch (Exception)
{
throw;
}
}
//atualizar empresa
public void AtualizarEmpresa(string arquivoJson)
{
string json = File.ReadAllText(arquivoJson);
try
{
var jObject = JObject.Parse(json);
JArray arrayExperiencias = (JArray)jObject["experiencias"];
Write("Informe o ID da empresa a atualizar : ");
var empresaId = Convert.ToInt32(Console.ReadLine());
if (empresaId > 0)
{
Write("Informe o nome da empresa: ");
var nomeEmpresa = Convert.ToString(Console.ReadLine());
foreach (var empresa in arrayExperiencias.Where(obj =>
obj["empresaid"].Value<int>() == empresaId))
{
empresa["empresanome"] = !string.IsNullOrEmpty(nomeEmpresa) ? nomeEmpresa : "";
}
jObject["experiencias"] = arrayExperiencias;
string saida = Newtonsoft.Json.JsonConvert.SerializeObject(jObject,
Newtonsoft.Json.Formatting.Indented);
File.WriteAllText(arquivoJson, saida);
}
else
{
Write("O ID da empresa é inválido, tente novamente!");
AtualizarEmpresa(arquivoJson);
}
}
catch (Exception ex)
{
WriteLine("Erro de Atualização : " + ex.Message.ToString());
}
}
//fim
}
}
|
Neste código temos os métodos:
Cada método recebe o caminho do arquivo JSON que deverá tratar.
A seguir estamos usando os métodos para serializar e deserializar as informações realizando o CRUD.
No arquivo Program inclua o código a seguir:
using System;
using static System.Console;
namespace Crud_JSON
{
class Program
{
static void Main(string[] args)
{
string arquivoJson = Environment.CurrentDirectory;
arquivoJson = arquivoJson.Replace("\\bin\\Debug", "");
arquivoJson = arquivoJson + "\\Dados\\usuario.json";
JsonCrud jscrud = new JsonCrud();
WriteLine("-- Operaçoes CRUD com arquivo JSON --");
WriteLine("");
while (true)
{
WriteLine("Opções : 1 - Incluir, 2 - Atualizar, 3 - Deletar, 4 - Selecionar \n");
try
{
var option = ReadLine();
switch (option)
{
case "1":
jscrud.AdicionarEmpresa(arquivoJson);
break;
case "2":
jscrud.AtualizarEmpresa(arquivoJson);
break;
case "3":
jscrud.DeletarEmpresa(arquivoJson);
break;
case "4":
jscrud.DetalhesdoUsuario(arquivoJson);
break;
default:
Main(null);
break;
}
}
catch (Exception ex)
{
WriteLine("Erro : " + ex.Message);
}
}
}
}
} |
No código acima criamos uma instância da classe JsonCrud e usamos os métodos para realizar o CRUD:
![]() |
Simples assim...
Pegue o
projeto aqui :
Crud_JSON.zip
"Grandes são as
obras do Senhor, procuradas por todos os que
nelas tomam prazer."
Salmos 111:2
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a
Objetos com VB .NET
Calculando a idade com precisão - Macoratti
Algumas funções com datas... - Macoratti
Cálculo com datas e horas - Macoratti
VB .NET - Calculando a diferença entre duas datas ... - Macoratti
JSON - Introdução e conceitos básicos - Macoratti
C# - Converter de JSON para Object e vice-versa - Macoratti
Serializando/Deserializando JSON usando contrato de ... - Macoratti.net
C# - Lendo e Escrevendo JSON no Cliente - Macoratti
VB .NET - Exibindo dados JSON em um DataGridView - Macoratti
C# - Fazendo requisições na web - Macoratti