JSON.NETでは、次のことができます。
JsonConvert.DefaultSettings = () => new JsonSerializerSettings {
DateTimeZoneHandling = DateTimeZoneHandling.Utc
};
System.Text.Json
似たようなものはありますか?
デフォルトを設定するオプションがない場合、手動で渡すことはできますか?
また、デフォルトは何ですか( Local
、 Utc
、 Unspecified
)?
日付のcc @ layomia
DateTimeはこれらの各形式(たとえば、タイムゾーン\オフセットの有無にかかわらず)で設定できるため、リーダー\ライター(したがってシリアライザー)は使用可能なものを使用し、それを表すためにISO8601形式を使用/想定します。
@btecu ISO 8601プロファイルは、
デシリアライズの場合、日時オフセットが「hh:mm」として指定されていると、 DateTimeKind.Local
DateTimeが作成されます。 「Z」はDateTimeKind.Utc
を与えます。 オフセットが指定されていない場合、 DateTimeKind.Unspecified
DateTimeが作成されます。
逆マッピングはシリアル化に適用されます。 DateTime
をDateTimeKind.Local
書き込むと、「hh:mm」形式のオフセットを持つISO表現が生成されます。
System.Text.JsonでのDateTimeとDateTimeOffsetのサポート、およびカスタムの解析またはフォーマットを実装する方法の詳細については、 https: //docs.microsoft.com/en-us/dotnet/standard/datetime/system-text-jsonを参照して
@btecu残念ながら、 System.Text.Json
同様のオプションを使用する唯一の方法は、次のことを行うことだと思います。
services.AddControllers()
.AddJsonOptions(options =>
{
options.JsonSerializerOptions.Converters.Add(new DateTimeConverter());
});
そしてそのようなDateTimeConverterを実装します
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"));
}
}
最も参考になるコメント
@btecu残念ながら、
System.Text.Json
同様のオプションを使用する唯一の方法は、次のことを行うことだと思います。そしてそのようなDateTimeConverterを実装します