@@ -3,21 +3,22 @@ namespace System.Text.Json.Serialization
33open System
44open System.Text .Json
55open System.Text .Json .Serialization .Helpers
6+ open System.Text .Json .Serialization .Metadata
67open 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
3738type 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
5657type JsonSetConverter < 'T when 'T: comparison > internal ( fsOptions ) =
5758 inherit JsonConverter< Set< 'T>>()
0 commit comments