Hola Rodrigo Menares,
¡Bienvenido(a) a Microsoft Q&A!
Lamentamos sinceramente la demora en abordar tu tema en este foro. Por favor ten en cuenta que nosotros no soportamos código ni scripts sin embargo, tu código actual para deserializar JSON parece estar bien estructurado. Ahora, para deserializar XML, tu enfoque es correcto, pero vamos a asegurarnos de que todos los detalles estén en su lugar.
Aquí tienes una versión revisada y completa de tu código para manejar tanto JSON como XML:
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
using System.Xml.Serialization;
using Newtonsoft.Json;
public class IndicadoresEconomicos
{
public Serie[] serie { get; set; }
}
public class Serie
{
public DateTime fecha { get; set; }
public decimal valor { get; set; }
}
public class TablaUf
{
public string FechUf { get; set; }
public string ValUf { get; set; }
}
public async Task ObtenerUf(string Fecha)
{
using HttpClient client = new HttpClient();
HttpResponseMessage responseuf = await client.GetAsync("https://www.mindicador.cl/api/uf/" + Fecha);
string StrResultTestUf = await responseuf.Content.ReadAsStringAsync();
_logger.LogInformation($"Lectura de Uf Correcta {StrResultTestUf}");
if (responseuf.Content.Headers.ContentType.MediaType == "application/json")
{
var IndicadoresUf = JsonConvert.DeserializeObject<IndicadoresEconomicos>(StrResultTestUf);
if (IndicadoresUf != null && IndicadoresUf.serie.Length > 0)
{
fecuf = IndicadoresUf.serie[0].fecha;
vlouf = IndicadoresUf.serie[0].valor;
}
else
{
_logger.LogError($"{StrResultTestUf}");
}
}
else if (responseuf.Content.Headers.ContentType.MediaType == "text/xml")
{
TablaUf result;
XmlSerializer serializer = new XmlSerializer(typeof(TablaUf));
using (StringReader reader = new StringReader(StrResultTestUf))
{
result = (TablaUf)serializer.Deserialize(reader);
}
if (result != null)
{
fecuf = Convert.ToDateTime(result.FechUf);
vlouf = Convert.ToDecimal(result.ValUf);
}
else
{
_logger.LogError($"{StrResultTestUf}");
}
}
else
{
_logger.LogError($"Formato de respuesta no soportado: {responseuf.Content.Headers.ContentType.MediaType}");
}
}
Puntos clave:
- Verificación del tipo de contenido: Asegúrate de que el
MediaType
sea exactamente "text/xml" para XML y "application/json" para JSON. - Deserialización XML: Usa
XmlSerializer
para deserializar la respuesta XML. - Manejo de errores: Añade verificaciones para asegurarte de que los objetos deserializados no sean nulos antes de intentar acceder a sus propiedades.
Con estos ajustes, deberías poder manejar respuestas en formato XML y JSON correctamente. Espero que la información te haya sido de utilidad. Adicionalmente, si no recibimos una respuesta tuya en los próximos días, procederemos a cerrar el tema. Agradecemos tu comprensión y estamos aquí para ayudar en lo que sea necesario.
Atentamente,
Gao
Si esta respuesta resolvió tu consulta, por favor haz clic en 'Aceptar respuesta'. Esto nos ayuda a mejorar continuamente la calidad y relevancia de nuestras soluciones.