using System.Text.Json; using System.Text.Json.Serialization; namespace Mercados.Api.Utils { /// /// Un convertidor de JSON personalizado para asegurar que los objetos DateTime /// se serialicen al formato ISO 8601 en UTC (con el designador 'Z'). /// public class UtcDateTimeConverter : JsonConverter { public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { // Al leer un string de fecha, nos aseguramos de que se interprete como UTC return reader.GetDateTime().ToUniversalTime(); } public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options) { // Antes de escribir el string, especificamos que el 'Kind' es Utc. // Si ya es Utc, no hace nada. Si es Local o Unspecified, lo trata como si fuera Utc. // Esto es seguro porque sabemos que todas nuestras fechas en la BD son UTC. var utcValue = DateTime.SpecifyKind(value, DateTimeKind.Utc); writer.WriteStringValue(utcValue); } } }