Skip to content

Commit 59e042b

Browse files
committed
feat: update System.Text.Json 8.0.5 and use JsonTypeInfo for lists
1 parent e8eb074 commit 59e042b

File tree

4 files changed

+19
-23
lines changed

4 files changed

+19
-23
lines changed

paket.dependencies

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ source https://api.nuget.org/v3/index.json
55
nuget FSharp.Core >= 6.0 lowest_matching:true
66
nuget Microsoft.SourceLink.GitHub prerelease copy_local:true
77
nuget Nerdbank.GitVersioning copy_local:true
8-
nuget System.Text.Json >= 6.0.10 lowest_matching: true
8+
nuget System.Text.Json >= 8.0.5 lowest_matching: true
99

1010
group test
1111
framework net9.0
@@ -15,7 +15,7 @@ source https://api.nuget.org/v3/index.json
1515
nuget FSharp.Core >= 6.0
1616
nuget FsCheck.XUnit
1717
nuget Microsoft.NET.Test.Sdk
18-
nuget System.Text.Json >= 8.0.5 prerelease
18+
nuget System.Text.Json >= 8.0.5
1919
nuget xunit
2020
nuget xunit.runner.visualstudio
2121
nuget BenchmarkDotNet

paket.lock

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,12 @@ NUGET
2222
System.Buffers (>= 4.5.1)
2323
System.Memory (>= 4.5.5)
2424
System.Runtime.CompilerServices.Unsafe (>= 6.0)
25-
System.Text.Json (6.0.10)
26-
Microsoft.Bcl.AsyncInterfaces (>= 6.0)
25+
System.Text.Json (8.0.5)
26+
Microsoft.Bcl.AsyncInterfaces (>= 8.0)
2727
System.Buffers (>= 4.5.1)
28-
System.Memory (>= 4.5.4)
29-
System.Numerics.Vectors (>= 4.5)
28+
System.Memory (>= 4.5.5)
3029
System.Runtime.CompilerServices.Unsafe (>= 6.0)
31-
System.Text.Encodings.Web (>= 6.0)
30+
System.Text.Encodings.Web (>= 8.0)
3231
System.Threading.Tasks.Extensions (>= 4.5.4)
3332
System.Threading.Tasks.Extensions (4.6.3)
3433
System.Runtime.CompilerServices.Unsafe (>= 6.1.2)
@@ -242,18 +241,14 @@ NUGET
242241
Perfolizer (0.5.2)
243242
System.CodeDom (9.0.5)
244243
System.Collections.Immutable (9.0.5)
245-
System.IO.Pipelines (10.0.0-preview.5.25277.114)
246244
System.Management (9.0.5)
247245
System.CodeDom (>= 9.0.5)
248246
System.Reflection.Metadata (9.0.5)
249247
System.Reflection.TypeExtensions (4.7)
250248
System.Runtime.CompilerServices.Unsafe (6.1.2)
251249
System.Security.AccessControl (6.0.1)
252250
System.Security.Principal.Windows (5.0)
253-
System.Text.Encodings.Web (10.0.0-preview.5.25277.114)
254-
System.Text.Json (10.0.0-preview.5.25277.114)
255-
System.IO.Pipelines (>= 10.0.0-preview.5.25277.114)
256-
System.Text.Encodings.Web (>= 10.0.0-preview.5.25277.114)
251+
System.Text.Json (9.0.5)
257252
xunit (2.9.3)
258253
xunit.analyzers (>= 1.18)
259254
xunit.assert (>= 2.9.3)

src/FSharp.SystemTextJson/All.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ type JsonFSharpConverter(fsOptions: JsonFSharpOptions, [<Optional>] overrides: I
4141

4242
static member internal CreateConverter(typeToConvert, options, fsOptions) =
4343
match TypeCache.getKind typeToConvert with
44-
| TypeCache.TypeKind.List -> JsonListConverter.CreateConverter(typeToConvert, fsOptions)
44+
| TypeCache.TypeKind.List -> JsonListConverter.CreateConverter(typeToConvert, options, fsOptions)
4545
| TypeCache.TypeKind.Set -> JsonSetConverter.CreateConverter(typeToConvert, fsOptions)
4646
| TypeCache.TypeKind.Map -> JsonMapConverter.CreateConverter(typeToConvert, options, fsOptions)
4747
| TypeCache.TypeKind.Tuple -> JsonTupleConverter.CreateConverter(typeToConvert, fsOptions)

src/FSharp.SystemTextJson/Collection.fs

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,22 @@ namespace System.Text.Json.Serialization
33
open System
44
open System.Text.Json
55
open System.Text.Json.Serialization.Helpers
6+
open System.Text.Json.Serialization.Metadata
67
open Microsoft.FSharp.Core.CompilerServices
78

8-
type JsonListConverter<'T> internal (fsOptions) =
9+
type JsonListConverter<'T> internal (options, fsOptions) =
910
inherit JsonConverter<list<'T>>()
1011
let tType = typeof<'T>
1112
let tIsNullable = isNullableFieldType fsOptions tType
1213
let needsNullChecking = not tIsNullable && not tType.IsValueType
14+
let typeInfo = JsonTypeInfo.CreateJsonTypeInfo<'T>(options)
1315

14-
override _.Read(reader, typeToConvert, options) =
16+
override _.Read(reader, typeToConvert, _options) =
1517
expectAlreadyRead JsonTokenType.StartArray "JSON array" &reader typeToConvert
1618

1719
let mutable l = ListCollector<'T>()
1820
while reader.Read() && reader.TokenType <> JsonTokenType.EndArray do
19-
let value = JsonSerializer.Deserialize(&reader, typeof<'T>, options)
20-
l.Add(value :?> 'T)
21+
l.Add(JsonSerializer.Deserialize<'T>(&reader, typeInfo))
2122
let list = l.Close()
2223

2324
if needsNullChecking then
@@ -32,26 +33,26 @@ type JsonListConverter<'T> internal (fsOptions) =
3233

3334
override _.HandleNull = true
3435

35-
new(fsOptions: JsonFSharpOptions) = JsonListConverter<'T>(fsOptions.Record)
36+
new(options, fsOptions: JsonFSharpOptions) = JsonListConverter<'T>(options, fsOptions.Record)
3637

3738
type JsonListConverter(fsOptions) =
3839
inherit JsonConverterFactory()
3940

4041
static member internal CanConvert(typeToConvert: Type) =
4142
TypeCache.isList typeToConvert
4243

43-
static member internal CreateConverter(typeToConvert: Type, fsOptions: JsonFSharpOptions) =
44+
static member internal CreateConverter(typeToConvert: Type, options: JsonSerializerOptions, fsOptions: JsonFSharpOptions) =
4445
typedefof<JsonListConverter<_>>
4546
.MakeGenericType([| typeToConvert.GetGenericArguments().[0] |])
46-
.GetConstructor([| typeof<JsonFSharpOptions> |])
47-
.Invoke([| fsOptions |])
47+
.GetConstructor([| typeof<JsonSerializerOptions>; typeof<JsonFSharpOptions> |])
48+
.Invoke([| options; fsOptions |])
4849
:?> JsonConverter
4950

5051
override _.CanConvert(typeToConvert) =
5152
JsonListConverter.CanConvert(typeToConvert)
5253

53-
override _.CreateConverter(typeToConvert, _options) =
54-
JsonListConverter.CreateConverter(typeToConvert, fsOptions)
54+
override _.CreateConverter(typeToConvert, options) =
55+
JsonListConverter.CreateConverter(typeToConvert, options, fsOptions)
5556

5657
type JsonSetConverter<'T when 'T: comparison> internal (fsOptions) =
5758
inherit JsonConverter<Set<'T>>()

0 commit comments

Comments
 (0)