TimeSpan の既定のシリアル化形式
System.Text.Json によって .NET 6 GA で TimeSpan のサポートが追加されました。ただし、この変更にはソース ジェネレーターのサポートが含まれていませんでした。 .NET 6 サービス リリース 6.0.2 では、System.Text.Json に、TimeSpan 値のソースジェネレーター シリアル化のサポートが含まれます。 このサポートによって、ソース ジェネレーターの TimeSpan 値で既定のシリアル化形式が変更されます。
以前の動作
.NET 6 GA では、ソース ジェネレーターによって、オブジェクトの既定のシリアル化動作ですが、型のすべてのパブリック プロパティが出力され、TimeSpan 値がシリアル化されます。
{"days":2,"hours":0,"milliseconds":0,"minutes":0,"seconds":1,"ticks":1728010000000,"totalDays":2.0000115740740743,"totalHours":48.000277777777775,"totalMilliseconds":172801000,"totalMinutes":2880.016666666667,"totalSeconds":172801}
新しい動作
サービス リリース .NET 6.0.2 では、ソース ジェネレーターによって、リフレクションベースのシリアライザー形式と一致する次の形式で TimeSpan 値がシリアル化されます。
"2.00:00:01"
導入されたバージョン
.NET 6.0.2 (サービス リリース)
破壊的変更の種類
この変更は、バイナリの互換性に影響を与える可能性があります。
変更理由
System.Text.Json ソース生成は新しい機能です。そのシリアル化動作は、リフレクションベースのシリアライザーと可能な限り一致する必要があります。 この変更により、ソース ジェネレーターへの移行が簡略化されます。
推奨される操作
ユーザーが現在の TimeSpan シリアル化形式に依存することはおそらくないでしょう。型のすべてのパブリック プロパティが冗長的に出力され (オブジェクトの既定のシリアル化動作)、ラウンドトリップしないためです。
既存の動作に依存する場合、推奨されるアクションは、TimeSpan から必要なプロパティを出力するカスタム コンバーターを作成することです。
public class TimeSpanConverter : JsonConverter<TimeSpan>
{
public void WriteValue(Utf8JsonWriter writer, TimeSpan value, JsonSerializerOptions options)
{
writer.WriteStartObject();
writer.WriteNumber("days", value.Days);
writer.WriteNumber("hours", value.Hours);
/* insert any needed properties here */
writer.WriteEndObject();
}
}
影響を受ける API
関連項目
[ System.Text.Json でソース生成を使用する方法](../../../../standard/serialization/system-text-json-source-generation.md)
.NET