Implementar a classe JsonSerializer em aplicativos C#

Concluído

A linguagem de programação C# fornece suporte interno para trabalhar com dados JSON por meio do System.Text.Json namespace. Esse namespace inclui classes e métodos para serializar e desserializar dados JSON, facilitando a conversão de objetos C# em JSON e vice-versa.

O que é serialização?

Serialização é o processo de converter o estado de um objeto (os valores de suas propriedades) em um formulário que pode ser armazenado ou transmitido. O formulário serializado não inclui nenhuma informação sobre os métodos associados de um objeto.

No contexto de um aplicativo C#, a serialização é usada para converter um objeto C# em uma cadeia de caracteres JSON. Isso é útil para salvar dados em arquivos, enviar dados por redes ou armazenar dados em bancos de dados. Por exemplo:

  • A serialização é essencial para o intercâmbio de dados entre sistemas ou aplicativos diferentes, especialmente quando eles usam diferentes linguagens de programação ou plataformas. Ele permite o compartilhamento fácil de dados em um formato padronizado que pode ser compreendido por vários sistemas.
  • A serialização também é usada em APIs Web para enviar e receber dados entre clientes e servidores. Quando um cliente faz uma solicitação para um servidor, o servidor pode serializar os dados de resposta no formato JSON, que o cliente pode desserializar novamente em um objeto.
  • A serialização é usada em cenários de armazenamento de dados, como salvar o estado do aplicativo ou as preferências do usuário. Ao serializar objetos para JSON, os desenvolvedores podem armazenar e recuperar facilmente estruturas de dados complexas sem a necessidade de analisar ou formatar manualmente os dados.
  • A serialização geralmente é usada em mecanismos de cache, em que os dados são armazenados em um formato serializado para melhorar o desempenho e reduzir a necessidade de consultas ou cálculos de banco de dados repetidos.

Desserialização é o processo inverso de serialização, em que uma cadeia de caracteres JSON é convertida novamente em um objeto C#. A desserialização permite que os desenvolvedores trabalhem com dados JSON de forma mais estruturada, usando objetos e propriedades C#. Isso é particularmente útil ao trabalhar com APIs ou fontes de dados externas que retornam respostas JSON ou ao trabalhar com informações armazenadas em arquivos JSON.

Examinar o System.Text.Json namespace

O System.Text.Json namespace é uma biblioteca poderosa no .NET para trabalhar com dados JSON. Ele fornece funcionalidade para serialização (convertendo objetos C# em JSON) e desserialização (convertendo JSON de volta em objetos C#). A biblioteca foi projetada para ser rápida, eficiente e fácil de usar, tornando-a uma opção popular para desenvolvedores que trabalham com JSON em aplicativos C#.

A System.Text.Json biblioteca faz parte da estrutura do .NET Core e está incluída no .NET 5 e versões posteriores. Ele fornece um conjunto de classes e métodos para trabalhar com dados JSON, incluindo:

  • JsonSerializer: uma classe para converter objetos C# em JSON e vice-versa. Ele fornece métodos para serializar e desserializar dados JSON, bem como opções para personalizar o processo de serialização.
  • JsonDocument: uma classe para ler e analisar dados JSON. Ele permite que os desenvolvedores naveguem e consultem estruturas JSON sem a necessidade de desserializá-las em objetos C#.
  • JsonElement: um struct que representa um valor JSON. Ele fornece métodos para acessar e manipular dados JSON, permitindo que os desenvolvedores trabalhem com estruturas JSON de maneira mais flexível.

A JsonSerializer classe é a classe primária usada para serialização e desserialização no System.Text.Json namespace. Ele fornece métodos para converter objetos C# em cadeias de caracteres JSON e vice-versa, facilitando o trabalho com dados JSON em aplicativos C#.

Examinar a JsonSerializer classe

A JsonSerializer classe fornece os seguintes métodos para serializar e desserializar JSON:

  • Serialize: converte um objeto C# em uma cadeia de caracteres JSON.
  • Deserialize: converte uma cadeia de caracteres JSON de volta em um objeto C#.

Serializar um objeto para JSON usando JsonSerializer.Serialize

O JsonSerializer.Serialize método é usado para converter um objeto em uma representação de cadeia de caracteres JSON. Isso é útil para salvar dados em arquivos, enviar dados por redes ou armazenar dados em bancos de dados. O Serialize método usa um objeto como entrada e retorna uma cadeia de caracteres JSON.

O código a seguir demonstra como converter um objeto em uma cadeia de caracteres JSON usando JsonSerializer.Serialize:


using System;
using System.Text.Json;
using System.Text.Json.Serialization;

public class Employee
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Address { get; set; }
}

class Program
{
    static void Main()
    {
        var customer = new Employee { Name = "Anette Thomsen", Age = 30, Address = "123 Main St" };
        string jsonString = JsonSerializer.Serialize(customer);
        Console.WriteLine(jsonString);
    }
}

// Output: {"Name":"Anette Thomsen","Age":30,"Address":"123 Main St"}

Esse código define uma classe simples Employee com propriedades para Name, Agee Address. O JsonSerializer.Serialize método é usado para converter uma instância da Employee classe em uma cadeia de caracteres JSON. A saída é uma representação JSON do objeto, que pode ser facilmente armazenada ou transmitida.

Desserializar JSON para um objeto usando JsonSerializer.Deserialize

O JsonSerializer.Deserialize método é usado para converter uma cadeia de caracteres JSON de volta em um objeto C#. A desserialização é útil para ler dados de arquivos, receber dados de APIs ou processar dados JSON em geral. O Deserialize método usa uma cadeia de caracteres JSON e o tipo do objeto a ser criado como entrada e retorna uma instância desse objeto.

O código a seguir demonstra como converter uma cadeia de caracteres JSON de volta em um objeto usando JsonSerializer.Deserialize:


using System;
using System.Text.Json;
using System.Text.Json.Serialization;

public class Employee
{
    public string Name { get; set; } = "Anette Thomsen";
    public int Age { get; set; }
    public string Address { get; set; } = "123 Main St";
}

class Program
{
    static void Main()
    {
        string jsonString1 = "{\"Name\":\"Anette Thomsen\",\"Age\":30,\"Address\":\"123 Main St\"}";
        string jsonString2 = @"{""Name"":""Anette Thomsen"",""Age"":30,""Address"":""123 Main St""}";
        var customer = JsonSerializer.Deserialize<Employee>(jsonString2);
        if (customer != null)
        {
            Console.WriteLine($"Name: {customer.Name}, Age: {customer.Age}, Address: {customer.Address}");
        }
        else
        {
            Console.WriteLine("Deserialization failed.");
        }
    }
}

// Output: Name: Anette Thomsen, Age: 30, Address: 123 Main St

Esse código define uma cadeia de caracteres JSON que representa um Employee objeto. O JsonSerializer.Deserialize método é usado para converter a cadeia de caracteres JSON de volta em uma instância da Employee classe. O JsonSerializer.Deserialize método é genérico, o que significa que você pode especificar o tipo de objeto que espera que a cadeia de caracteres JSON represente.

Nesse caso, especificamos Employee como o parâmetro de tipo, permitindo que o método crie uma instância da Employee classe com base nos dados JSON. O Deserialize método retorna uma instância da Employee classe. As propriedades do objeto desserializado podem ser acessadas diretamente, conforme mostrado no exemplo. Se a desserialização falhar (por exemplo, se a cadeia de caracteres JSON for inválida ou não corresponder à estrutura esperada), o método retornará nulo e você poderá lidar com esse caso de acordo.

Observe que a construção manual da cadeia de caracteres JSON requer caracteres de escape ou literais de cadeia de caracteres verbatim. O @ símbolo antes da cadeia de caracteres indica que é um literal de cadeia de caracteres verbatim. Literais de cadeia de caracteres verbatim permitem a formatação que algumas pessoas acham mais fácil de ler.

Resumo

Nesta unidade, você aprendeu a trabalhar com dados JSON em C# usando o System.Text.Json namespace. Você explorou os conceitos de serialização e desserialização, que permitem converter objetos C# em cadeias de caracteres JSON e vice-versa. Você também examinou a JsonSerializer classe, que fornece métodos para serializar e desserializar dados JSON. Você viu exemplos de como usar e SerializeDeserialize métodos para converter objetos em JSON e voltar, facilitando o trabalho com dados JSON em aplicativos C#. Entender esses conceitos é essencial para trabalhar com APIs, armazenamento de dados e intercâmbio de dados no desenvolvimento de software moderno.