Skip to content

Commit a6b7de3

Browse files
authored
Add .Net 8 target (#112)
* Add .net8 SDK * Refactor how DateTimeOffsetConverter is updated * Add .Net8 target * Fix DaktelaJsonSerializerContext for .NET8
1 parent 6831452 commit a6b7de3

File tree

8 files changed

+70
-33
lines changed

8 files changed

+70
-33
lines changed

.github/workflows/build.yml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,12 @@ jobs:
1414
env:
1515
DOTNET_CLI_TELEMETRY_OPTOUT: 'true'
1616
steps:
17-
- name: Setup .Net 7.0.x
17+
- name: Setup .Net
1818
uses: actions/setup-dotnet@v3
1919
with:
20-
dotnet-version: '7.0.x'
20+
dotnet-version: |
21+
7.0.x
22+
8.0.x
2123
- uses: actions/checkout@v4
2224
- name: Restore
2325
run: dotnet restore --nologo src
@@ -36,10 +38,10 @@ jobs:
3638
DOTNET_CLI_TELEMETRY_OPTOUT: 'true'
3739
steps:
3840
- uses: actions/checkout@v4
39-
- name: Setup .Net 7.0.x
41+
- name: Setup .Net 8.0.x
4042
uses: actions/setup-dotnet@v3
4143
with:
42-
dotnet-version: '7.0.x'
44+
dotnet-version: '8.0.x'
4345
- name: Restore
4446
run: dotnet restore --nologo src
4547
- name: .Net Format

.github/workflows/nightly-release.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@ jobs:
1111
env:
1212
DOTNET_CLI_TELEMETRY_OPTOUT: 'true'
1313
steps:
14-
- name: Setup .Net 7.0.x
14+
- name: Setup .Net
1515
uses: actions/setup-dotnet@v3
1616
with:
17-
dotnet-version: '7.0.x'
17+
dotnet-version: |
18+
7.0.x
19+
8.0.x
1820
- uses: actions/checkout@v4
1921
- name: Fetch all history for all tags and branches
2022
run: git fetch --prune --unshallow

.github/workflows/pr-build.yml

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,12 @@ jobs:
1414
env:
1515
DOTNET_CLI_TELEMETRY_OPTOUT: 'true'
1616
steps:
17-
- name: Setup .Net 7.0.x
17+
- name: Setup .Net
1818
uses: actions/setup-dotnet@v3
1919
with:
20-
dotnet-version: '7.0.x'
20+
dotnet-version: |
21+
7.0.x
22+
8.0.x
2123
- uses: actions/checkout@v4
2224
- name: Restore
2325
run: dotnet restore --nologo src
@@ -30,10 +32,10 @@ jobs:
3032
DOTNET_CLI_TELEMETRY_OPTOUT: 'true'
3133
steps:
3234
- uses: actions/checkout@v4
33-
- name: Setup .Net 7.0.x
35+
- name: Setup .Net 8.0.x
3436
uses: actions/setup-dotnet@v3
3537
with:
36-
dotnet-version: '7.0.x'
38+
dotnet-version: '8.0.x'
3739
- name: Restore
3840
run: dotnet restore --nologo src
3941
- name: .Net Format

.github/workflows/release.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@ jobs:
1010
env:
1111
DOTNET_CLI_TELEMETRY_OPTOUT: 'true'
1212
steps:
13-
- name: Setup .Net 7.0.x
13+
- name: Setup .Net
1414
uses: actions/setup-dotnet@v3
1515
with:
16-
dotnet-version: '7.0.x'
16+
dotnet-version: |
17+
7.0.x
18+
8.0.x
1719
- uses: actions/checkout@v4
1820
- name: Fetch all history for all tags and branches
1921
run: git fetch --prune --unshallow
@@ -43,4 +45,3 @@ jobs:
4345
run: dotnet nuget push 'nuget-packages/*.nupkg' --api-key ${{ secrets.GITHUB_TOKEN }} --source github
4446
- name: Push package to Nuget
4547
run: dotnet nuget push 'nuget-packages/*.nupkg' --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json
46-

src/Daktela.HttpClient/Api/DaktelaJsonSerializerContext.cs

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using Daktela.HttpClient.Implementations.JsonConverters;
22
using System;
33
using System.Collections.Generic;
4+
using System.Text.Json;
45
using System.Text.Json.Serialization;
56

67
namespace Daktela.HttpClient.Api;
@@ -61,26 +62,29 @@ public static TimeSpan SerializationDateTimeOffset
6162
set
6263
{
6364
_serializationDateTimeOffset = value;
64-
s_defaultContext = null;
65-
SetConverters();
65+
DateTimeOffsetConverter.SetDateTimeOffset(_serializationDateTimeOffset);
6666
}
6767
}
6868

69+
private static readonly DateTimeOffsetConverter DateTimeOffsetConverter = new(SerializationDateTimeOffset);
70+
6971
static DaktelaJsonSerializerContext()
7072
{
71-
SetConverters();
73+
SetConverters(s_defaultOptions.Converters);
74+
#if NET8_0_OR_GREATER
75+
Default = new DaktelaJsonSerializerContext(new JsonSerializerOptions(s_defaultOptions));
76+
#endif
7277
}
7378

74-
static void SetConverters()
79+
public static void SetConverters(ICollection<JsonConverter> jsonConverters)
7580
{
76-
s_defaultOptions.Converters.Clear();
77-
s_defaultOptions.Converters.Add(new DateTimeOffsetConverter(SerializationDateTimeOffset));
78-
s_defaultOptions.Converters.Add(new TimeSpanConverter());
79-
s_defaultOptions.Converters.Add(new ReadActivityConverter());
80-
s_defaultOptions.Converters.Add(new CustomFieldsConverter());
81-
s_defaultOptions.Converters.Add(new EnumsConverterFactory());
82-
s_defaultOptions.Converters.Add(new EmailActivityOptionsHeadersAddressConverter());
83-
s_defaultOptions.Converters.Add(new ErrorResponseConverter());
84-
s_defaultOptions.Converters.Add(new ErrorFormConverter());
81+
jsonConverters.Add(DateTimeOffsetConverter);
82+
jsonConverters.Add(new TimeSpanConverter());
83+
jsonConverters.Add(new ReadActivityConverter());
84+
jsonConverters.Add(new CustomFieldsConverter());
85+
jsonConverters.Add(new EnumsConverterFactory());
86+
jsonConverters.Add(new EmailActivityOptionsHeadersAddressConverter());
87+
jsonConverters.Add(new ErrorResponseConverter());
88+
jsonConverters.Add(new ErrorFormConverter());
8589
}
8690
}

src/Daktela.HttpClient/Daktela.HttpClient.csproj

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net7.0</TargetFramework>
5-
<LangVersion>11.0</LangVersion>
4+
<TargetFrameworks>net7.0;net8.0</TargetFrameworks>
5+
<LangVersion>12.0</LangVersion>
66
<Nullable>enable</Nullable>
77
<PackageLicense>MIT</PackageLicense>
88
<ProjectName>HttpClient</ProjectName>
@@ -18,15 +18,25 @@
1818
</PropertyGroup>
1919

2020
<ItemGroup>
21-
<None Include="..\..\README.md" Pack="true" PackagePath="\"/>
21+
<None Include="..\..\README.md" Pack="true" PackagePath="\" />
22+
</ItemGroup>
23+
24+
<ItemGroup>
25+
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All" />
2226
</ItemGroup>
2327

2428
<ItemGroup Condition=" '$(TargetFramework)' == 'net7.0' ">
2529
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="7.0.0" />
2630
<PackageReference Include="Microsoft.Extensions.Http" Version="7.0.0" />
2731
<PackageReference Include="Microsoft.Extensions.Options" Version="7.0.1" />
2832
<PackageReference Include="Microsoft.Extensions.Options.DataAnnotations" Version="7.0.0" />
29-
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1" PrivateAssets="All"/>
33+
</ItemGroup>
34+
35+
<ItemGroup Condition=" '$(TargetFramework)' == 'net8.0' ">
36+
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0" />
37+
<PackageReference Include="Microsoft.Extensions.Http" Version="8.0.0" />
38+
<PackageReference Include="Microsoft.Extensions.Options" Version="8.0.0" />
39+
<PackageReference Include="Microsoft.Extensions.Options.DataAnnotations" Version="8.0.0" />
3040
</ItemGroup>
3141

3242
</Project>

src/Daktela.HttpClient/Implementations/JsonConverters/DateTimeOffsetConverter.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,18 @@ namespace Daktela.HttpClient.Implementations.JsonConverters;
1010

1111
public class DateTimeOffsetConverter : JsonConverter<DateTimeOffset>, IDateTimeOffsetConverter
1212
{
13-
private readonly TimeSpan _dateTimeOffset;
13+
private TimeSpan _dateTimeOffset;
1414

1515
public DateTimeOffsetConverter(TimeSpan dateTimeOffset)
1616
{
1717
_dateTimeOffset = dateTimeOffset;
1818
}
1919

20+
internal void SetDateTimeOffset(TimeSpan dateTimeOffset)
21+
{
22+
_dateTimeOffset = dateTimeOffset;
23+
}
24+
2025
public override DateTimeOffset Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
2126
{
2227
Debug.Assert(typeToConvert == typeof(DateTimeOffset));

tests/Daktela.HttpClient.Tests/Daktela.HttpClient.Tests.csproj

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net7.0</TargetFramework>
5-
<LangVersion>11.0</LangVersion>
4+
<TargetFrameworks>net7.0;net8.0</TargetFrameworks>
5+
<LangVersion>12.0</LangVersion>
66
<Nullable>enable</Nullable>
77

88
<IsPackable>false</IsPackable>
@@ -41,6 +41,17 @@
4141
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="7.0.0" />
4242
</ItemGroup>
4343

44+
<ItemGroup Condition=" '$(TargetFramework)' == 'net8.0' ">
45+
<PackageReference Include="Microsoft.Extensions.Configuration" Version="8.0.0" />
46+
<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="8.0.0" />
47+
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="8.0.0" />
48+
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.0" />
49+
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
50+
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
51+
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="8.0.0" />
52+
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="8.0.0" />
53+
</ItemGroup>
54+
4455
<ItemGroup>
4556
<None Update="appsettings.json5" CopyToPublishDirectory="Always" CopyToOutputDirectory="Always" />
4657
<None Update="*.appsettings.json5" CopyToPublishDirectory="Always" CopyToOutputDirectory="Always" />

0 commit comments

Comments
 (0)