Serialización de objetos en C# (.NET): JSON, XML y Binary

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Serialización de objetos en C# (.NET): JSON, XML y Binary

La serialización es el proceso de convertir un objeto complejo (o un grafo de objetos) en un flujo de bytes o un formato de texto (JSON, XML). Esto es necesario para guardar el estado de un objeto en un archivo, transmitir datos a través de la red (REST API, gRPC) o almacenarlos en caché. El proceso inverso, la deserialización, restaura el objeto a partir de su representación serializada. En el ecosistema .NET (incluyendo .NET Core y .NET 5/6/7/8), existen varios mecanismos de serialización integrados.



1. System.Text.Json — serialización moderna en JSON

A partir de .NET Core 3.0, Microsoft recomienda usar System.Text.Json como la forma principal de trabajar con JSON. La biblioteca es ligera, de alto rendimiento y no requiere dependencias de terceros (a diferencia de Newtonsoft.Json).

Ejemplo básico de serialización y deserialización

using System;using System.Text.Json;

public class Person{ public string Name { get; set; } public int Age { get; set; } public List<string> Hobbies { get; set; }}

class Program{ static void Main() { var person = new Person { Name = "Alekséi", Age = 30, Hobbies = new List<string> { "Lectura", "Programación" } };

// Serialización string json = JsonSerializer.Serialize(person); Console.WriteLine(json); // {"Name":"Alekséi","Age":30,"Hobbies":["Lectura","Programación"]}

// Deserialización Person restored = JsonSerializer.Deserialize<Person>(json); Console.WriteLine(restored.Name); // Alekséi }}


Configuración de la serialización con atributos

Puede controlar los nombres de las propiedades en JSON, ignorar valores nulos o usar convertidores personalizados:

using System.Text.Json.Serialization;

public class Product{ [JsonPropertyName("product_id")] public int Id { get; set; }

[JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)] public string? Description { get; set; }

[JsonConverter(typeof(JsonStringEnumConverter))] public Status Status { get; set; }}

public enum Status { Active, Inactive }


2. XmlSerializer — serialización en XML

La clase XmlSerializer (espacio de nombres System.Xml.Serialization) está disponible en todas las versiones de .NET y es ideal para la compatibilidad con sistemas heredados o archivos de configuración XML.

Ejemplo de trabajo con XmlSerializer

using System;using System.IO;using System.Xml.Serialization;

[XmlRoot("Employee")]public class Employee{ [XmlElement("FullName")] public string Name { get; set; }

[XmlAttribute("id")] public int Id { get; set; }

[XmlArray("Projects")] [XmlArrayItem("Project")] public List<string> Projects { get; set; }}

class Program{ static void Main() { var emp = new Employee { Id = 101, Name = "María Ivanova", Projects = new List<string> { "Alpha", "Beta" } };

var serializer = new XmlSerializer(typeof(Employee)); using (var writer = new StreamWriter("employee.xml")) { serializer.Serialize(writer, emp); }

// Deserialización using (var reader = new StreamReader("employee.xml")) { Employee restored = (Employee)serializer.Deserialize(reader); Console.WriteLine(restored.Name); // María Ivanova } }}

Importante: XmlSerializer requiere que la clase tenga un constructor público sin parámetros, y que las propiedades serializables sean públicas y tengan setters.



3. BinaryFormatter (obsoleto, pero se menciona para legacy)

Anteriormente, System.Runtime.Serialization.Formatters.Binary.Bi

Recommendations