Json y Fechas en C#

5 views
Skip to first unread message

Kiquenet

unread,
Aug 5, 2025, 10:25:08 AMAug 5
to AltNet-Hispano
Deserializar json con fechas con espacios ?? buenas prácticas ?

 "FECHA": " 2025-08-01 00:00:00"

Kiquenet

unread,
Aug 5, 2025, 10:26:09 AMAug 5
to AltNet-Hispano

Falla con espacios !!

public class JsonDateTimeConverter : JsonConverter<DateTime>

    {

        // Lista de formatos de fecha/hora que se aceptan durante la deserialización

        private static readonly string[] acceptedFormats = new[]

        {

            "yyyy-MM-dd'T'HH:mm:ss",

            "yyyy-MM-dd HH:mm:ss",

            "yyyy-MM-dd"

        };

 

        /// <summary>

        /// Lógica para leer y convertir una cadena JSON a un objeto DateTime.

        /// Intenta varios formatos definidos y luego un parseo por defecto si es necesario.

        /// </summary>

        /// <param name="reader">El lector JSON que contiene la cadena de fecha/hora.</param>

        /// <param name="typeToConvert">El tipo al que se está convirtiendo (DateTime).</param>

        /// <param name="options">Opciones de serialización JSON.</param>

        /// <returns>Un objeto DateTime representando la fecha/hora leída.</returns>

        /// <exception cref="JsonException">Lanza una excepción si no se puede convertir la cadena a DateTime.</exception>

        public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)

        {

            string value = reader.GetString();

 

            foreach (var format in acceptedFormats)

            {

                if (DateTime.TryParseExact(value, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime date))

                {

                    return date;

                }

            }

 

            // Último intento: usar TryParse estándar por si llega en otro formato aceptado por el sistema  

            if (DateTime.TryParse(value, out DateTime parsedDate))

            {

                return parsedDate;

            }

 

            throw new JsonException($"No se pudo convertir el valor '{value}' a DateTime.");

        }

 

        /// <summary>

        /// Lógica para serializar un objeto DateTime a una cadena en formato ISO 8601.

        /// </summary>

        /// <param name="writer">El escritor JSON donde se escribirá la cadena de fecha/hora.</param>

        /// <param name="value">El objeto DateTime que se va a serializar.</param>

        /// <param name="options">Opciones de serialización JSON.</param>

        /// <exception cref="NotSupportedException">Lanza una excepción si se intenta serializar un valor nulo.</exception>

        /// <remarks>Siempre escribe en formato ISO 8601 para consistencia.</remarks>

        public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)

        {          

            writer.WriteStringValue(value.ToString("yyyy-MM-ddTHH:mm:ss"));

        }

    }

Reply all
Reply to author
Forward
0 new messages