次の方法で共有


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

こちらも参照ください