Skip to content

Commit 708c4e8

Browse files
committed
Use non-generic Deserialize only for 'T[]
1 parent bb0a5eb commit 708c4e8

2 files changed

Lines changed: 12 additions & 11 deletions

File tree

src/FSharp.SystemTextJson/Collection.fs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ type JsonListConverter<'T>(fsOptions) =
2121
array |> List.ofArray
2222

2323
override _.Write(writer, value, options) =
24-
JsonSerializer.Serialize(writer, value, typeof<seq<'T>>, options)
24+
JsonSerializer.Serialize<seq<'T>>(writer, value, options)
2525

2626
type JsonListConverter(fsOptions) =
2727
inherit JsonConverterFactory()
@@ -53,7 +53,7 @@ type JsonSetConverter<'T when 'T : comparison>(fsOptions) =
5353
match reader.TokenType with
5454
| JsonTokenType.EndArray -> acc
5555
| _ ->
56-
let elt = JsonSerializer.Deserialize(&reader, typeof<'T>, options) :?> 'T
56+
let elt = JsonSerializer.Deserialize<'T>(&reader, options)
5757
read (Set.add elt acc) &reader options
5858

5959
override _.Read(reader, typeToConvert, options) =
@@ -67,7 +67,7 @@ type JsonSetConverter<'T when 'T : comparison>(fsOptions) =
6767
set
6868

6969
override _.Write(writer, value, options) =
70-
JsonSerializer.Serialize(writer, value, typeof<seq<'T>>, options)
70+
JsonSerializer.Serialize<seq<'T>>(writer, value, options)
7171

7272
type JsonSetConverter(fsOptions) =
7373
inherit JsonConverterFactory()
@@ -99,7 +99,7 @@ type JsonStringMapConverter<'V>() =
9999
| JsonTokenType.EndObject -> acc
100100
| JsonTokenType.PropertyName ->
101101
let key = reader.GetString()
102-
let value = JsonSerializer.Deserialize(&reader, typeof<'V>, options) :?> 'V
102+
let value = JsonSerializer.Deserialize<'V>(&reader, options)
103103
read (Map.add key value acc) &reader options
104104
| _ ->
105105
fail "JSON field" &reader ty
@@ -116,7 +116,7 @@ type JsonStringMapConverter<'V>() =
116116
| null -> kv.Key
117117
| p -> p.ConvertName kv.Key
118118
writer.WritePropertyName(k)
119-
JsonSerializer.Serialize(writer, kv.Value, typeof<'V>, options)
119+
JsonSerializer.Serialize<'V>(writer, kv.Value, options)
120120
writer.WriteEndObject()
121121

122122
type JsonWrappedStringMapConverter<'K, 'V when 'K : comparison>() =
@@ -135,7 +135,7 @@ type JsonWrappedStringMapConverter<'K, 'V when 'K : comparison>() =
135135
| JsonTokenType.EndObject -> acc
136136
| JsonTokenType.PropertyName ->
137137
let key = reader.GetString()
138-
let value = JsonSerializer.Deserialize(&reader, typeof<'V>, options) :?> 'V
138+
let value = JsonSerializer.Deserialize<'V>(&reader, options)
139139
read (Map.add (wrap [|key|] :?> 'K) value acc) &reader options
140140
| _ ->
141141
fail "JSON field" &reader ty
@@ -167,9 +167,9 @@ type JsonMapConverter<'K, 'V when 'K : comparison>() =
167167
| JsonTokenType.EndArray -> acc
168168
| JsonTokenType.StartArray ->
169169
reader.Read() |> ignore
170-
let key = JsonSerializer.Deserialize(&reader, typeof<'K>, options) :?> 'K
170+
let key = JsonSerializer.Deserialize<'K>(&reader, options)
171171
reader.Read() |> ignore
172-
let value = JsonSerializer.Deserialize(&reader, typeof<'V>, options) :?> 'V
172+
let value = JsonSerializer.Deserialize<'V>(&reader, options)
173173
readExpecting JsonTokenType.EndArray "JSON array" &reader ty
174174
read (Map.add key value acc) &reader options
175175
| _ ->
@@ -183,8 +183,8 @@ type JsonMapConverter<'K, 'V when 'K : comparison>() =
183183
writer.WriteStartArray()
184184
for kv in value do
185185
writer.WriteStartArray()
186-
JsonSerializer.Serialize(writer, kv.Key, typeof<'K>, options)
187-
JsonSerializer.Serialize(writer, kv.Value, typeof<'V>, options)
186+
JsonSerializer.Serialize<'K>(writer, kv.Key, options)
187+
JsonSerializer.Serialize<'V>(writer, kv.Value, options)
188188
writer.WriteEndArray()
189189
writer.WriteEndArray()
190190

tests/FSharp.SystemTextJson.TrimTest/Program.fs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ open Xunit
66
let ``Regression #77`` () =
77
let options = JsonSerializerOptions()
88
options.Converters.Add(JsonFSharpConverter())
9-
Assert.Equal<int>([1; 2; 3], JsonSerializer.Deserialize<int list>("[1,2,3]", options))
9+
Assert.Equal<int list>([1; 2; 3], JsonSerializer.Deserialize("[1,2,3]", options))
10+
Assert.Equal("""[1,2,3]""", JsonSerializer.Serialize([1;2;3], options))
1011

1112
[<EntryPoint>]
1213
let main args = Xunit.ConsoleClient.Program.Main args

0 commit comments

Comments
 (0)