Tengo una aplicación que realiza llamadas a través de una API, la cual responde un JSON con la información correspondiente.
En mi aplicación creo un objeto Datatable y creo tantas columnas como me devuelve el JSON.
var retorno = await EnviarGET<string>("Sinc...", "Get...", peticion, "GET");
DataTable tUsuarios = new DataTable();
JObject def = (JObject)JSON.ToObject(retorno);
JArray data = (JArray)JSON.ToObject(def["Datos"].ToString());
var oRetornoFichador = new JObject();
foreach (JObject item in data)
{
DataColumn column;
column = new DataColumn();
column.DataType = System.Type.GetType("System.Int32");
column.ColumnName = "Index";
tUsuarios.Columns.Add(column);
column = new DataColumn();
column.DataType = System.Type.GetType("System.DateTime");
column.ColumnName = "FechaDesde";
tUsuarios.Columns.Add(column);
column = new DataColumn();
column.DataType = System.Type.GetType("System.DateTime");
column.ColumnName = "FechaHasta";
tUsuarios.Columns.Add(column);
.
.
.
Como se ve, hay columnas de varios tipos, entre ellos DateTime. Después de esto, creo una fila con la estructura de columnas de la tabla y la relleno con los datos del JSON:
foreach (JJSon.JObject item2 in data2)
{
DataRow drow = tUsuarios.NewRow();
Logger.Write(item2.ToString());
if (item2["FechaDesde"].ToString() == "")
{
drow["FechaDesde"] = DateTime.Now;
}
else
{
Logger.Write(CultureInfo.CurrentCulture.ToString());
drow["FechaDesde"] = DateTime.Parse(item2["FechaDesde"].ToString(), provider);
}
.
.
.
Mi problema está en esta línea (o similares que tengo más abajo):
drow["FechaDesde"] = DateTime.Parse(item2["FechaDesde"].ToString(), provider);
Cuando lo ejecuto en mi pc me funciona sin problema pero si lo ejecuto en otro pc me da un error:
No se puede reconocer la cadena como valor DateTime válido.
Creo que el error no es por el tipo de columna a la hora de hacer la asignación porque si intento imprimir ese mismo valor, sin meterlo a la tabla haciendo lo siguiente me da el mismo error:
CultureInfo provider = CultureInfo.CreateSpecificCulture("es-ES");
Logger.Write(DateTime.Parse(item2["FechaDesde"].ToString()).ToString());
He pensado que cambiando la Cultura me valdría pero en ambos equipos es "es-ES", esto lo veo con el logger.
Otra opción que he probado es a utilizar el método ParseExact de la clase DateTime indicando un formato y la cultura y me da el mismo error.
El json que contiene la fecha que me da problema es el siguiente:
{"Datos":
[
{
.
.
.
"FechaDesde":"27/11/2023 0:00:00",
"FechaHasta":"01/01/2026 0:00:00",
.
.
.
}
]
}
Creo que el error no está en la Cultura utilizada porque la siguiente línea me la ejecuta sin problema en ambos pcs:
peticionGTPU.Add("diaFB", DateTime.Parse(f_blindaje).Day); //Valor de f_blindaje: "07/12/2023 17:07:45", es un string obtenido de un json