27 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
		
		
			
		
	
	
			27 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
|  | using System.Text.Json; | ||
|  | using System.Text.Json.Serialization; | ||
|  | 
 | ||
|  | namespace Mercados.Api.Utils | ||
|  | { | ||
|  |     /// <summary> | ||
|  |     /// Un convertidor de JSON personalizado para asegurar que los objetos DateTime | ||
|  |     /// se serialicen al formato ISO 8601 en UTC (con el designador 'Z'). | ||
|  |     /// </summary> | ||
|  |     public class UtcDateTimeConverter : JsonConverter<DateTime> | ||
|  |     { | ||
|  |         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); | ||
|  |         } | ||
|  |     } | ||
|  | } |