Skip to content

Commit 7ea66ed

Browse files
committed
Merge branch 'fix_148' of https://github.com/cosmin-ciuc/WebApi.Hal into fix_148
2 parents 262ff51 + c481df6 commit 7ea66ed

3 files changed

Lines changed: 49 additions & 43 deletions

File tree

WebApi.Hal/JsonConverters/ResourceConverter.cs

Lines changed: 45 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -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,

WebApi.Hal/JsonHalMediaTypeInputFormatter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@ public JsonHalMediaTypeInputFormatter(ILogger logger, JsonSerializerSettings ser
2323
throw new ArgumentNullException(nameof(hypermediaResolver));
2424
}
2525

26-
_resourceConverter = new ResourceConverter(hypermediaResolver);
26+
_resourceConverter = new ResourceConverter(hypermediaResolver, SerializerSettings);
2727
Initialize();
2828
}
2929

3030
public JsonHalMediaTypeInputFormatter(ILogger logger, JsonSerializerSettings serializerSettings, ArrayPool<char> charPool, ObjectPoolProvider objectPoolProvider, MvcOptions mvcOptions, MvcJsonOptions mvcJsonOptions)
3131
: base(logger, serializerSettings, charPool, objectPoolProvider, mvcOptions, mvcJsonOptions)
3232
{
33-
_resourceConverter = new ResourceConverter();
33+
_resourceConverter = new ResourceConverter(SerializerSettings);
3434
Initialize();
3535
}
3636

WebApi.Hal/JsonHalMediaTypeOutputFormatter.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public JsonHalMediaTypeOutputFormatter(
2828
throw new ArgumentNullException(nameof(hypermediaResolver));
2929
}
3030

31-
_resourceConverter = new ResourceConverter(hypermediaResolver);
31+
_resourceConverter = new ResourceConverter(hypermediaResolver, SerializerSettings);
3232
Initialize();
3333
}
3434

@@ -37,7 +37,7 @@ public JsonHalMediaTypeOutputFormatter(
3737
ArrayPool<char> charPool) :
3838
base(serializerSettings, charPool)
3939
{
40-
_resourceConverter = new ResourceConverter();
40+
_resourceConverter = new ResourceConverter(SerializerSettings);
4141
Initialize();
4242
}
4343

0 commit comments

Comments
 (0)