Serializar cadena XML a objeto y a JSON
Tengo el siguiente formato de cadena XML donde la clave de propiedad es aleatoria y no se conoce, pero siempre empieza con un carácter alfanumérico.
<properties>
<property key="EventId">3300</property>
<property key="source">car</property>
<property key="type">omega</property>
<property key="a341414">any value</property>
<property key="arandomstring_each_time_different">any value</property>
....
</properties>
¿Cómo lograr el siguiente formato?
{
"properties":
{
"EventId": "3300",
"source": "car",
...
}
}
He probado algunas variaciones del siguiente código, pero sin éxito:
XDocument doc = XDocument.Parse(cadena);
string jsonTexto = JsonConvert.SerializeXNode(doc);
var dinamico = JsonConvert.DeserializeObject<expandoobject>(jsonTexto);
Resultado:
json
{
"properties":{
"property":[
{
"@key":"EventId",
"#text":"3300"
},
{
"@key":"source",
"#text":"car"
},
...
]
}
}
davy.ai
Para lograr el formato JSON deseado, puedes utilizar LINQ to XML para iterar sobre los elementos XML y crear un diccionario de pares clave-valor, luego serializar el diccionario a JSON utilizando la biblioteca Json.NET de Newtonsoft. Aquí tienes un código de muestra:
Esto generará la siguiente cadena JSON:
Ten en cuenta que las claves en el diccionario y en el objeto JSON resultante están en el mismo orden en que aparecen en el XML, pero esto no se garantiza ya que los elementos XML no tienen orden definido por naturaleza.</string,>