diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 88c5662..ee1abf5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,10 +14,12 @@ jobs: env: DOTNET_CLI_TELEMETRY_OPTOUT: 'true' steps: - - name: Setup .Net 7.0.x + - name: Setup .Net uses: actions/setup-dotnet@v3 with: - dotnet-version: '7.0.x' + dotnet-version: | + 7.0.x + 8.0.x - uses: actions/checkout@v4 - name: Restore run: dotnet restore --nologo src @@ -36,10 +38,10 @@ jobs: DOTNET_CLI_TELEMETRY_OPTOUT: 'true' steps: - uses: actions/checkout@v4 - - name: Setup .Net 7.0.x + - name: Setup .Net 8.0.x uses: actions/setup-dotnet@v3 with: - dotnet-version: '7.0.x' + dotnet-version: '8.0.x' - name: Restore run: dotnet restore --nologo src - name: .Net Format diff --git a/.github/workflows/nightly-release.yml b/.github/workflows/nightly-release.yml index 6c341cc..ef7796d 100644 --- a/.github/workflows/nightly-release.yml +++ b/.github/workflows/nightly-release.yml @@ -11,10 +11,12 @@ jobs: env: DOTNET_CLI_TELEMETRY_OPTOUT: 'true' steps: - - name: Setup .Net 7.0.x + - name: Setup .Net uses: actions/setup-dotnet@v3 with: - dotnet-version: '7.0.x' + dotnet-version: | + 7.0.x + 8.0.x - uses: actions/checkout@v4 - name: Fetch all history for all tags and branches run: git fetch --prune --unshallow diff --git a/.github/workflows/pr-build.yml b/.github/workflows/pr-build.yml index 0b22aa6..c94c087 100644 --- a/.github/workflows/pr-build.yml +++ b/.github/workflows/pr-build.yml @@ -14,10 +14,12 @@ jobs: env: DOTNET_CLI_TELEMETRY_OPTOUT: 'true' steps: - - name: Setup .Net 7.0.x + - name: Setup .Net uses: actions/setup-dotnet@v3 with: - dotnet-version: '7.0.x' + dotnet-version: | + 7.0.x + 8.0.x - uses: actions/checkout@v4 - name: Restore run: dotnet restore --nologo src @@ -30,10 +32,10 @@ jobs: DOTNET_CLI_TELEMETRY_OPTOUT: 'true' steps: - uses: actions/checkout@v4 - - name: Setup .Net 7.0.x + - name: Setup .Net 8.0.x uses: actions/setup-dotnet@v3 with: - dotnet-version: '7.0.x' + dotnet-version: '8.0.x' - name: Restore run: dotnet restore --nologo src - name: .Net Format diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 60ba4e6..b6464e5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,10 +10,12 @@ jobs: env: DOTNET_CLI_TELEMETRY_OPTOUT: 'true' steps: - - name: Setup .Net 7.0.x + - name: Setup .Net uses: actions/setup-dotnet@v3 with: - dotnet-version: '7.0.x' + dotnet-version: | + 7.0.x + 8.0.x - uses: actions/checkout@v4 - name: Fetch all history for all tags and branches run: git fetch --prune --unshallow @@ -43,4 +45,3 @@ jobs: run: dotnet nuget push 'nuget-packages/*.nupkg' --api-key ${{ secrets.GITHUB_TOKEN }} --source github - name: Push package to Nuget run: dotnet nuget push 'nuget-packages/*.nupkg' --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json - diff --git a/src/Daktela.HttpClient/Api/DaktelaJsonSerializerContext.cs b/src/Daktela.HttpClient/Api/DaktelaJsonSerializerContext.cs index b6f53a0..3214442 100644 --- a/src/Daktela.HttpClient/Api/DaktelaJsonSerializerContext.cs +++ b/src/Daktela.HttpClient/Api/DaktelaJsonSerializerContext.cs @@ -1,6 +1,7 @@ using Daktela.HttpClient.Implementations.JsonConverters; using System; using System.Collections.Generic; +using System.Text.Json; using System.Text.Json.Serialization; namespace Daktela.HttpClient.Api; @@ -61,26 +62,29 @@ public static TimeSpan SerializationDateTimeOffset set { _serializationDateTimeOffset = value; - s_defaultContext = null; - SetConverters(); + DateTimeOffsetConverter.SetDateTimeOffset(_serializationDateTimeOffset); } } + private static readonly DateTimeOffsetConverter DateTimeOffsetConverter = new(SerializationDateTimeOffset); + static DaktelaJsonSerializerContext() { - SetConverters(); + SetConverters(s_defaultOptions.Converters); +#if NET8_0_OR_GREATER + Default = new DaktelaJsonSerializerContext(new JsonSerializerOptions(s_defaultOptions)); +#endif } - static void SetConverters() + public static void SetConverters(ICollection jsonConverters) { - s_defaultOptions.Converters.Clear(); - s_defaultOptions.Converters.Add(new DateTimeOffsetConverter(SerializationDateTimeOffset)); - s_defaultOptions.Converters.Add(new TimeSpanConverter()); - s_defaultOptions.Converters.Add(new ReadActivityConverter()); - s_defaultOptions.Converters.Add(new CustomFieldsConverter()); - s_defaultOptions.Converters.Add(new EnumsConverterFactory()); - s_defaultOptions.Converters.Add(new EmailActivityOptionsHeadersAddressConverter()); - s_defaultOptions.Converters.Add(new ErrorResponseConverter()); - s_defaultOptions.Converters.Add(new ErrorFormConverter()); + jsonConverters.Add(DateTimeOffsetConverter); + jsonConverters.Add(new TimeSpanConverter()); + jsonConverters.Add(new ReadActivityConverter()); + jsonConverters.Add(new CustomFieldsConverter()); + jsonConverters.Add(new EnumsConverterFactory()); + jsonConverters.Add(new EmailActivityOptionsHeadersAddressConverter()); + jsonConverters.Add(new ErrorResponseConverter()); + jsonConverters.Add(new ErrorFormConverter()); } } diff --git a/src/Daktela.HttpClient/Daktela.HttpClient.csproj b/src/Daktela.HttpClient/Daktela.HttpClient.csproj index 5ac3c59..a71691a 100644 --- a/src/Daktela.HttpClient/Daktela.HttpClient.csproj +++ b/src/Daktela.HttpClient/Daktela.HttpClient.csproj @@ -1,8 +1,8 @@ - net7.0 - 11.0 + net7.0;net8.0 + 12.0 enable MIT HttpClient @@ -18,7 +18,11 @@ - + + + + + @@ -26,7 +30,13 @@ - + + + + + + + diff --git a/src/Daktela.HttpClient/Implementations/JsonConverters/DateTimeOffsetConverter.cs b/src/Daktela.HttpClient/Implementations/JsonConverters/DateTimeOffsetConverter.cs index c5f2e41..3b869ca 100644 --- a/src/Daktela.HttpClient/Implementations/JsonConverters/DateTimeOffsetConverter.cs +++ b/src/Daktela.HttpClient/Implementations/JsonConverters/DateTimeOffsetConverter.cs @@ -10,13 +10,18 @@ namespace Daktela.HttpClient.Implementations.JsonConverters; public class DateTimeOffsetConverter : JsonConverter, IDateTimeOffsetConverter { - private readonly TimeSpan _dateTimeOffset; + private TimeSpan _dateTimeOffset; public DateTimeOffsetConverter(TimeSpan dateTimeOffset) { _dateTimeOffset = dateTimeOffset; } + internal void SetDateTimeOffset(TimeSpan dateTimeOffset) + { + _dateTimeOffset = dateTimeOffset; + } + public override DateTimeOffset Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { Debug.Assert(typeToConvert == typeof(DateTimeOffset)); diff --git a/tests/Daktela.HttpClient.Tests/Daktela.HttpClient.Tests.csproj b/tests/Daktela.HttpClient.Tests/Daktela.HttpClient.Tests.csproj index 6d32a06..67dd741 100644 --- a/tests/Daktela.HttpClient.Tests/Daktela.HttpClient.Tests.csproj +++ b/tests/Daktela.HttpClient.Tests/Daktela.HttpClient.Tests.csproj @@ -1,8 +1,8 @@ - net7.0 - 11.0 + net7.0;net8.0 + 12.0 enable false @@ -41,6 +41,17 @@ + + + + + + + + + + +