@@ -11,14 +11,21 @@ namespace WebApi.Hal.JsonConverters
1111{
1212 public class ResourceConverter : JsonConverter
1313 {
14- public ResourceConverter ( )
14+ private readonly JsonSerializerSettings _jsonSerializerSettings ;
15+
16+ public ResourceConverter ( JsonSerializerSettings jsonSerializerSettings )
1517 {
18+ _jsonSerializerSettings = jsonSerializerSettings ;
1619 }
1720
18- public ResourceConverter ( IHypermediaResolver hypermediaConfiguration )
21+ public ResourceConverter ( IHypermediaResolver hypermediaConfiguration , JsonSerializerSettings jsonSerializerSettings ) : this ( jsonSerializerSettings )
1922 {
20- HypermediaResolver = hypermediaConfiguration ??
21- throw new ArgumentNullException ( nameof ( hypermediaConfiguration ) ) ;
23+ if ( hypermediaConfiguration == null )
24+ {
25+ throw new ArgumentNullException ( nameof ( hypermediaConfiguration ) ) ;
26+ }
27+
28+ HypermediaResolver = hypermediaConfiguration ;
2229 }
2330
2431 public IHypermediaResolver HypermediaResolver { get ; }
@@ -40,45 +47,44 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
4047 if ( linksBackup . Count == 0 )
4148 resource . Links = null ; // avoid serialization
4249
43- var localJsonSerializer = JsonSerializer . Create ( ) ;
44- localJsonSerializer . CheckAdditionalContent = serializer . CheckAdditionalContent ;
45- localJsonSerializer . Context = serializer . Context ;
46- localJsonSerializer . ContractResolver = serializer . ContractResolver ;
47- localJsonSerializer . ConstructorHandling = serializer . ConstructorHandling ;
48- foreach ( var converter in serializer . Converters . Where ( converter => converter != this ) )
49- {
50- localJsonSerializer . Converters . Add ( converter ) ;
51- }
52-
53- localJsonSerializer . Culture = serializer . Culture ;
54- localJsonSerializer . DateFormatHandling = serializer . DateFormatHandling ;
55- localJsonSerializer . DateFormatString = serializer . DateFormatString ;
56- localJsonSerializer . DateParseHandling = serializer . DateParseHandling ;
57- localJsonSerializer . DateTimeZoneHandling = serializer . DateTimeZoneHandling ;
58- localJsonSerializer . DefaultValueHandling = serializer . DefaultValueHandling ;
59- localJsonSerializer . EqualityComparer = serializer . EqualityComparer ;
60- localJsonSerializer . FloatFormatHandling = serializer . FloatFormatHandling ;
61- localJsonSerializer . FloatParseHandling = serializer . FloatParseHandling ;
62- localJsonSerializer . Formatting = serializer . Formatting ;
63- localJsonSerializer . MaxDepth = serializer . MaxDepth ;
64- localJsonSerializer . MetadataPropertyHandling = serializer . MetadataPropertyHandling ;
65- localJsonSerializer . MissingMemberHandling = serializer . MissingMemberHandling ;
66- localJsonSerializer . NullValueHandling = serializer . NullValueHandling ;
67- localJsonSerializer . ObjectCreationHandling = serializer . ObjectCreationHandling ;
68- localJsonSerializer . PreserveReferencesHandling = serializer . PreserveReferencesHandling ;
69- localJsonSerializer . ReferenceLoopHandling = serializer . ReferenceLoopHandling ;
70- localJsonSerializer . ReferenceResolver = serializer . ReferenceResolver ;
71- localJsonSerializer . SerializationBinder = serializer . SerializationBinder ;
72- localJsonSerializer . StringEscapeHandling = serializer . StringEscapeHandling ;
73- localJsonSerializer . TraceWriter = serializer . TraceWriter ;
74- localJsonSerializer . TypeNameAssemblyFormatHandling = serializer . TypeNameAssemblyFormatHandling ;
75- localJsonSerializer . TypeNameHandling = serializer . TypeNameHandling ;
76-
7750 resource . ConverterContext = GetResourceConverterContext ( ) ;
51+
52+ var localJsonSerializer = JsonSerializer . Create ( new JsonSerializerSettings
53+ {
54+ CheckAdditionalContent = _jsonSerializerSettings . CheckAdditionalContent ,
55+ ConstructorHandling = _jsonSerializerSettings . ConstructorHandling ,
56+ Context = serializer . Context ,
57+ ContractResolver = _jsonSerializerSettings . ContractResolver ,
58+ Converters = _jsonSerializerSettings . Converters . Where ( converter => converter != this ) . ToList ( ) ,
59+ Culture = _jsonSerializerSettings . Culture ,
60+ DateFormatHandling = _jsonSerializerSettings . DateFormatHandling ,
61+ DateFormatString = _jsonSerializerSettings . DateFormatString ,
62+ DateParseHandling = _jsonSerializerSettings . DateParseHandling ,
63+ DateTimeZoneHandling = _jsonSerializerSettings . DateTimeZoneHandling ,
64+ DefaultValueHandling = _jsonSerializerSettings . DefaultValueHandling ,
65+ EqualityComparer = _jsonSerializerSettings . EqualityComparer ,
66+ Error = _jsonSerializerSettings . Error ,
67+ FloatFormatHandling = _jsonSerializerSettings . FloatFormatHandling ,
68+ FloatParseHandling = _jsonSerializerSettings . FloatParseHandling ,
69+ Formatting = _jsonSerializerSettings . Formatting ,
70+ MaxDepth = _jsonSerializerSettings . MaxDepth ,
71+ MetadataPropertyHandling = _jsonSerializerSettings . MetadataPropertyHandling ,
72+ MissingMemberHandling = _jsonSerializerSettings . MissingMemberHandling ,
73+ NullValueHandling = _jsonSerializerSettings . NullValueHandling ,
74+ ObjectCreationHandling = _jsonSerializerSettings . ObjectCreationHandling ,
75+ PreserveReferencesHandling = _jsonSerializerSettings . PreserveReferencesHandling ,
76+ ReferenceLoopHandling = _jsonSerializerSettings . ReferenceLoopHandling ,
77+ ReferenceResolverProvider = _jsonSerializerSettings . ReferenceResolverProvider ,
78+ SerializationBinder = _jsonSerializerSettings . SerializationBinder ,
79+ StringEscapeHandling = _jsonSerializerSettings . StringEscapeHandling ,
80+ TraceWriter = _jsonSerializerSettings . TraceWriter ,
81+ TypeNameAssemblyFormatHandling = _jsonSerializerSettings . TypeNameAssemblyFormatHandling ,
82+ TypeNameHandling = _jsonSerializerSettings . TypeNameHandling
83+ } ) ;
7884 localJsonSerializer . Serialize ( writer , resource ) ;
7985
8086 if ( linksBackup . Count == 0 )
81- resource . Links = linksBackup ;
87+ resource . Links = linksBackup ;
8288 }
8389
8490 public override object ReadJson ( JsonReader reader , Type objectType , object existingValue ,
0 commit comments