Serialización de objetos en C# (.NET): guía completa

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): desde lo básico hasta técnicas avanzadas



La serialización es el proceso de convertir objetos complejos (clases, estructuras) en un formato que se pueda guardar en un archivo, transmitir por la red o escribir en una base de datos. El proceso inverso (restaurar un objeto desde un flujo de datos) se llama deserialización. En la plataforma .NET existen varias herramientas integradas y de terceros para la serialización, cada una con sus propias características, rendimiento y ámbito de aplicación.



En este artículo analizaremos las principales formas de serialización en C#: JSON (System.Text.Json y Newtonsoft.Json), XML (XmlSerializer), serialización binaria (BinaryFormatter — obsoleto, pero aún se encuentra) y Protocol Buffers (protobuf-net) para escenarios de alto rendimiento.



1. Serialización en JSON con System.Text.Json



A partir de .NET Core 3.0, Microsoft recomienda usar el espacio de nombres System.Text.Json para trabajar con JSON. Es una API rápida, de bajo nivel y asíncrona.



Ejemplo 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 string Email { get; set; }}

class Program{ static void Main() { var person = new Person { Name = "Iván Petrov", Age = 30, Email = "ivan@example.com" };

// Serialización a cadena JSON string jsonString = JsonSerializer.Serialize(person); Console.WriteLine(jsonString); // Salida: {"Name":"Iván Petrov","Age":30,"Email":"ivan@example.com"}

// Deserialización desde JSON string jsonInput = @"{""Name"":""María"",""Age"":25,""Email"":""maria@test.ru""}"; Person restoredPerson = JsonSerializer.Deserialize<Person>(jsonInput); Console.WriteLine($"Nombre: {restoredPerson.Name}, Edad: {restoredPerson.Age}"); }}


Configuración de la serialización:

  • Ignorar propiedades null: JsonSerializerOptions { DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull }
  • Formateo (pretty print): JsonSerializerOptions { WriteIndented = true }
  • Trabajar con referencias cíclicas: ReferenceHandler.Preserve


2. Newtonsoft.Json (Json.NET) — el clásico



Antes de la llegada de System.Text.Json, el estándar de facto era la biblioteca Newtonsoft.Json (se instala a través de NuGet). Soporta más escenarios: objetos dinámicos, atributos, convertidores y configuraciones flexibles.



using Newtonsoft.Json;

public class Order{ public int Id { get; set; } public decimal Amount { get; set; } [JsonIgnore] public string InternalNote { get; set; } // Este campo no se serializará}

var order = new Order { Id = 1, Amount = 99.99m, InternalNote = "Secreto" };string json = JsonConvert.SerializeObject(order, Formatting.Indented);Console.WriteLine(json);// {// "Id": 1,// "Amount": 99.99// }

var deserialized = JsonConvert.DeserializeObject<Order>(json);


3. Serialización en XML (XmlSerializer)



Para el formato XML en .NET se utiliza la clase XmlSerializer. Es adecuada para la compatibilidad con sistemas heredados y servicios SOAP.



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

[Serializable]public class Product{ [XmlAttribute] public int Id { get; set; } [XmlElement("ProductName")] public string Name { get; set; }}

class Program{ static void Main() { var product = new Product { Id = 42, Name = "Portátil" };

// Serializaci

Recommendations