javascript - issue - serialize date in json




Puoi dire a JSON.Net di serializzare DateTime come Utc anche se non specificato? (2)

Le date nel mio database sono memorizzate come Utc. Ma quando li riprendo con la struttura dell'entità vengono fuori come tipo non specificato.

Quando JSON.Net li serializza, non sono in formato Utc. C'è un modo per dire a JSON.Net di serializzare DateTimes come Utc anche se il loro tipo non è specificato come Utc?


La risposta sopra funziona totalmente e quindi l'ho usata per creare un attributo per convertire una risposta API da PST a UTC.

Per prima cosa avevo bisogno di creare un JsonConverter

public class UTCDateTimeConverter : Newtonsoft.Json.JsonConverter {
    private TimeZoneInfo pacificZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time");
    public override bool CanConvert(Type objectType) {
        return objectType == typeof(DateTime);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) {
        if (reader.Value == null) return null;
        var pacificTime = DateTime.Parse(reader.Value.ToString());
        return TimeZoneInfo.ConvertTimeToUtc(pacificTime, pacificZone);
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) {
        writer.WriteValue(TimeZoneInfo.ConvertTimeFromUtc((DateTime) value, pacificZone));
    }
}

Poi ho dovuto applicarlo alle proprietà che dovevano essere convertite

public class Order{
    [JsonConverter(typeof(UTCDateTimeConverter))]
    public DateTime OrderDate {get;set;}
}

Imposta DateTimeZoneHandling su JsonSerializerSettings su Utc . Ciò convertirà tutte le date in UTC prima di serializzarle.

public void SerializeObjectDateTimeZoneHandling()
{
  string json = JsonConvert.SerializeObject(
    new DateTime(2000, 1, 1, 1, 1, 1, DateTimeKind.Unspecified),
    new JsonSerializerSettings
    {
      DateTimeZoneHandling = DateTimeZoneHandling.Utc
    });

  Assert.AreEqual(@"""2000-01-01T01:01:01Z""", json);
}

Documentazione: impostazione DateTimeZoneHandling





json.net