Mismo que anterior Commit
This commit is contained in:
27
src/Mercados.Api/Utils/UtcDateTimeConverter.cs
Normal file
27
src/Mercados.Api/Utils/UtcDateTimeConverter.cs
Normal file
@@ -0,0 +1,27 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user