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
こちらも参照ください
.NET