Dans JSON.NET, vous pouvez :
JsonConvert.DefaultSettings = () => new JsonSerializerSettings {
DateTimeZoneHandling = DateTimeZoneHandling.Utc
};
Y a-t-il quelque chose de similaire dans System.Text.Json
?
S'il n'y a pas d'option pour définir la valeur par défaut, peut-elle être transmise manuellement ?
De plus, quelle est la valeur par défaut ( Local
, Utc
, Unspecified
) ?
cc @layomia sur les dates
Puisqu'un DateTime peut être défini dans chacun de ces formats (par exemple avec et sans le fuseau horaire\offset), le lecteur\écrivain (et donc le sérialiseur) utilise ce qui est disponible et utilise\assume un format ISO 8601 pour le représenter.
@btecu le profil ISO 8601 est utilisé par défaut dans le sérialiseur, par exemple 2019-07-26T16:59:57-05:00.
Pour la désérialisation, si l'offset datetime est donné comme "hh:mm", un DateTime avec DateTimeKind.Local
est créé. "Z" donnera DateTimeKind.Utc
. Si aucun décalage n'est donné, alors un DateTime avec DateTimeKind.Unspecified
est créé.
Le mappage inverse s'applique à la sérialisation : écrire un DateTime
avec DateTimeKind.Local
produira une représentation ISO avec un décalage au format "hh:mm", et ainsi de suite.
Pour plus d'informations sur la prise en charge de DateTime et DateTimeOffset dans System.Text.Json et sur la façon dont vous pouvez implémenter une analyse ou une mise en forme personnalisée, consultez https://docs.microsoft.com/en-us/dotnet/standard/datetime/system-text-json -Support.
@btecu malheureusement le seul moyen, je pense, d'avoir l'option similaire dans System.Text.Json
est de faire :
services.AddControllers()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.Add(new DateTimeConverter());
});
et implémenter DateTimeConverter comme ça
public class DateTimeConverter : JsonConverter<DateTime>
{
public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
{
return DateTime.Parse(reader.GetString());
}
public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
{
writer.WriteStringValue(value.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssZ"));
}
}
Commentaire le plus utile
@btecu malheureusement le seul moyen, je pense, d'avoir l'option similaire dans
System.Text.Json
est de faire :et implémenter DateTimeConverter comme ça