11namespace System.Text.Json.Serialization
22
33open System
4+ open System.Collections .Generic
45open System.Runtime .InteropServices
56open System.Text .Json
67
7- type JsonFSharpConverter ( fsOptions : JsonFSharpOptions ) =
8+ type JsonFSharpConverter
9+ (
10+ fsOptions: JsonFSharpOptions,
11+ [< Optional>]
12+ overrides: IDictionary< Type, JsonFSharpOptions>
13+ ) =
814 inherit JsonConverterFactory()
915
1016 override _.CanConvert ( typeToConvert ) =
1117 TypeCache.getKind typeToConvert <> TypeCache.TypeKind.Other
1218
13- static member internal CreateConverter ( typeToConvert , options , fsOptions ) =
19+ static member internal CreateConverter ( typeToConvert , options , fsOptions , overrides ) =
1420 match TypeCache.getKind typeToConvert with
1521 | TypeCache.TypeKind.List ->
1622 JsonListConverter.CreateConverter( typeToConvert, fsOptions)
@@ -21,14 +27,14 @@ type JsonFSharpConverter(fsOptions: JsonFSharpOptions) =
2127 | TypeCache.TypeKind.Tuple ->
2228 JsonTupleConverter.CreateConverter( typeToConvert, fsOptions)
2329 | TypeCache.TypeKind.Record ->
24- JsonRecordConverter.CreateConverter( typeToConvert, options, fsOptions)
30+ JsonRecordConverter.CreateConverter( typeToConvert, options, fsOptions, overrides )
2531 | TypeCache.TypeKind.Union ->
26- JsonUnionConverter.CreateConverter( typeToConvert, options, fsOptions)
32+ JsonUnionConverter.CreateConverter( typeToConvert, options, fsOptions, overrides )
2733 | _ ->
2834 invalidOp ( " Not an F# record or union type: " + typeToConvert.FullName)
2935
3036 override _.CreateConverter ( typeToConvert , options ) =
31- JsonFSharpConverter.CreateConverter( typeToConvert, options, fsOptions)
37+ JsonFSharpConverter.CreateConverter( typeToConvert, options, fsOptions, overrides )
3238
3339 new (
3440 [<Optional; DefaultParameterValue( Default.UnionEncoding) >]
@@ -44,9 +50,11 @@ type JsonFSharpConverter(fsOptions: JsonFSharpOptions) =
4450 [<Optional; DefaultParameterValue( Default.AllowNullFields) >]
4551 allowNullFields : bool ,
4652 [<Optional; DefaultParameterValue( false ) >]
47- allowOverride : bool
53+ allowOverride : bool ,
54+ [<Optional>]
55+ overrides : IDictionary < Type , JsonFSharpOptions >
4856 ) =
49- JsonFSharpConverter( JsonFSharpOptions( unionEncoding, unionTagName, unionFieldsName, unionTagNamingPolicy, unionTagCaseInsensitive, allowNullFields, allowOverride))
57+ JsonFSharpConverter( JsonFSharpOptions( unionEncoding, unionTagName, unionFieldsName, unionTagNamingPolicy, unionTagCaseInsensitive, allowNullFields, allowOverride), overrides )
5058
5159[<AttributeUsage( AttributeTargets.Class ||| AttributeTargets.Struct) >]
5260type JsonFSharpConverterAttribute
@@ -69,7 +77,7 @@ type JsonFSharpConverterAttribute
6977 let fsOptions = JsonFSharpOptions( unionEncoding, unionTagName, unionFieldsName, Default.UnionTagNamingPolicy, unionTagCaseInsensitive, allowNullFields, false )
7078
7179 override _.CreateConverter ( typeToConvert ) =
72- JsonFSharpConverter.CreateConverter( typeToConvert, options, fsOptions)
80+ JsonFSharpConverter.CreateConverter( typeToConvert, options, fsOptions, null )
7381
7482 interface IJsonFSharpConverterAttribute with
7583 member this.Options = fsOptions
0 commit comments