.NET

Conversión de XML a JSON con Json.NET

Lectura de 7 minutos

La conversión de XML a JSON es un requisito común al actualizar aplicaciones .NET: la migración de servicios o almacenes basados en XML heredados a sistemas nativos de JSON como Servidor Couchbase o Couchbase Capella. En C#, dos bibliotecas gestionan esta conversión: Newtonsoft Json.NET (el estándar comunitario de larga data, ahora en v13) y System.Text.Json (integrado en .NET Core 3.1+ como una alternativa ligera). Este artículo cubre las diferencias clave entre XML y JSON, cómo realizar la conversión utilizando ambas bibliotecas, casos de uso a tener en cuenta y cómo almacenar los documentos JSON resultantes en Couchbase utilizando el SDK de .NET.

XML vs. JSON: Diferencias clave

Característica XML JSON Consideraciones sobre la migración
Sintaxis Baseado en etiquetas: Alice Valores clave-valor: {“name”: “Alice”} Las etiquetas XML se convierten en claves JSON
Gran cantidad de palabras Alto: etiquetas de apertura y cierre Bajo: mínima sobrecarga de sintaxis Los documentos JSON pueden ser un 30-60% más pequeños que los equivalentes en XML.
Matrices Elementos repetidos: Tipo de matriz nativo: [“a”,”b”] Elementos XML repetidos
Atributos Nativo: No hay equivalente directo Los atributos XML necesitan una conveniencia en el objeto JSON, por ejemplo, el campo @id o id` en el objeto JSON.
Lectura humana Modera: extenso pero estructurado Alto: compacto y familiar para los desarrolladores El formato JSON es generalmente preferido para las API modernas y los bancos de datos de documentos.
Suporte para navegadores y API En declinación: las API REST prefieren el formato JSON Universal: nativo en JavaScript Las API REST casi siempre utilizan JSON; el XML sigue estando presente en SOAP o en sistemas heredados.

 

Opcion 1: Newtonsoft Json.NET

Newtonsoft Json.NET es la biblioteca JSON más utilizada en el ecosistema .NET. Proporciona una conversión de XML a JSON en una sola línea mediante XmlNodeConverter:

Opcion 2: System.Text.Json (.NET integrado)

System.Text.Json está integrado en .NET (Core) 3.1 y versiones posteriores. No tiene una conversión nativa de XML a JSON, pero se puede combinar con XDocument para un enfoque en dos pasos:

Esta opción requiere una función auxiliar:

Para la mayoría de los escenarios de migración de XML a JSON, Newtonsoft Json.NET es la opción más sencilla y generalmente ofrece más funcionalidades. System.Text.Json sería la opción más adecuada para nuevos proyectos en .NET 6+ que no migren de XML y cuando la eficiencia de la serialización sea crucial.

Característica Newtonsoft Json.NET System.Text.Json
Conversión XML Native: SerializeXmlNode y DeserializeXmlNode Manual: requiere código auxiliar personalizado
Rendimiento En general, adecuado Optimizado para Span /SpanReadOnly
Disponibilidad Paquete NuGet Incorporado en .NET Core 3.1+ / .NET 5+
Flexibilidad Alto: amplio conjunto de características y opciones de personalización Moderado: opiniones encontradas, menos puntos de extensión
Cuando considerar Migración de XML; escenarios de serialización complejos Nuevos proyectos .NET 6+; API’s sensibles al rendimiento

 

Almacenamiento de JSON convertido en Couchbase (.NET SDK)

Una vez convertidos en JSON, los documentos se pueden almacenar en Couchbase utilizando el SDK de .NET 3.x. El SDK acepta cualquier objeto C# o JObject (de NewtonSoft) como valor de documento:

Para la migración masiva de muchos documentos XML, utilice Tarea.CuandoTodos Para insertar/agregar documentos de forma paralela:

Casos comunes

Caso extremo Problema Solución
Elementos individuales versus múltiples elementos Un único El elemento se convierte en una cadena; los múltiples se convierten en una matriz Generar la salida de la matriz mediante la configuración JsonConvert o procesar el JSON en etapas posteriores
Atributos XML vs. elementos Los atributos reciben el prefijo @ en la salida de Json.NET Retirar @ del prefijo en el proceso de post-procesamiento si no es necesario en los documentos de Couchbase
Nombres de espacio XML Los espacios de nombres aparecen como claves @xmlns Despeje los nombres de los espacios de nombres antes de la conversión mediante XmlDocument.RemoveAll() en los nodos de espacios de nombres
Elementos nulos / vacíos Las etiquetas XML vacías se convierten en cadenas null o vacías Normalizar a null o eliminar del documento en el proceso de postprocesamiento
Archivos XML de gran tamaño La carga de un XmlDocument grande en la memoria puede causar errores de sobrecarga de memoria. Utilice XmlReader para la conversión en streaming de archivos grandes

 

Preguntas frecuentes

¿Cómo puedo convertir XML a JSON en C#?

La forma más sencilla es Newtonsoft Json.NET: carga tu XML en un XmlDocument, luego llama JsonConverter.SerializeXmlNode(doc). Para proyectos .NET 6+ que no necesiten migración de XML, System.Text.Json es la alternativa integrada. Consulta los ejemplos de código anteriores para ambos enfoques.

¿Qué es Newtonsoft Json.NET?

Newtonsoft Json.NET es la biblioteca JSON más utilizada en el ecosistema .NET, mantenida por James Newton-King. Su versión actual es 13.x. Provee serialización, deserialización, consulta (LINQ a JSON) y conversión de XML a JSON. Instalación mediante NuGet: Instalar-Package Newtonsoft.Json.

¿Cuál es la diferencia entre XML y JSON?

El XML utiliza una sintaxis basada en etiquetas con atributos, espacios de nombres y validación de esquemas mediante XSD. El JSON utiliza un formato compacto de clave-valor que el JavaScript soporta de forma nativa. Los documentos JSON suelen ser un 30-60% más pequeños, más rápidos en análisis y universalmente compatibles con las API REST modernas y los bancos de datos de documentos. Consulte la tabla de comparación anterior para obtener una descripción completa.

¿Cómo guardo el JSON convertido en Couchbase desde C#? Utilice el SDK de .NET de Couchbase 3.x (NuGet: CouchbaseNetClient). Conéctese a su clúster de Couchbase o a un punto de acceso de Capella, obtenga una referencia a una colección y llame collection. UpsertAsync(documentId, jsonObject). El SDK acepta JObject (de Newtonsoft) o cualquier POCO .NET. Consulte el ejemplo de código en la sección “Almacenamiento en Couchbase” anterior.

¿Debería usar Newtonsoft Json.NET o System.Text.Json? En los casos de migración de XML, Newtonsoft Json.NET es la mejor opción: tiene una conversión nativa de XML a JSON mediante SerializeXmlNode(). Para nuevos proyectos .NET 6+ que no impliquen XML, System.Text.Json es la opción preferida: está integrada, eficiente en la asignación de recursos y ofrece mejores resultados en escenarios de alta velocidad de procesamiento.

Conclusión

La conversión de XML a JSON en C# es sencilla con Newtonsoft Json.NET. SerializeXmlNode método. Las consideraciones principales son el manejo de atributos (@ prefix convention), la coerción repetida de matrices de elementos y la eliminación de espacios de nombres. Una vez convertido, el SDK de Couchbase .NET simplifica la manera de almacenar los documentos JSON resultantes en Couchbase Capella o Server utilizando UpsertAsync.

Este post del blog se inspiró en una conversación por correo electrónico con un usuario de Couchbase. Si tienes alguna sugerencia sobre herramientas, consejos o trucos para facilitar este proceso, por favor déjame saber. ¡O, contacta conmigo si hay algo que quieras que escriba en mi blog! Puedes envíame un correo electrónico o Contacte conmigo @mgroves en X.

Compartir este artículo

Autor

Matthew D. Groves is a guy who loves to code. It doesn’t matter if it’s C#, jQuery, or PHP: he’ll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent’s pizza shop back in the 90s. He worked as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.

Deja un comentario

Deje el desorden de las bases de datos en el pasado

Cada suma de pilas significa otra factura y más cosas que gestionar. Calcula cuánto podrías ahorrar en 2 minutos.