Skip to content

Commit

Permalink
Merge branch 'fix_148' of https://github.com/cosmin-ciuc/WebApi.Hal i…
Browse files Browse the repository at this point in the history
…nto fix_148
  • Loading branch information
cosmin-ciuc committed Oct 19, 2018
2 parents 262ff51 + c481df6 commit 7ea66ed
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 43 deletions.
84 changes: 45 additions & 39 deletions WebApi.Hal/JsonConverters/ResourceConverter.cs
Expand Up @@ -11,14 +11,21 @@ namespace WebApi.Hal.JsonConverters
{
public class ResourceConverter : JsonConverter
{
public ResourceConverter()
private readonly JsonSerializerSettings _jsonSerializerSettings;

public ResourceConverter(JsonSerializerSettings jsonSerializerSettings)
{
_jsonSerializerSettings = jsonSerializerSettings;
}

public ResourceConverter(IHypermediaResolver hypermediaConfiguration)
public ResourceConverter(IHypermediaResolver hypermediaConfiguration, JsonSerializerSettings jsonSerializerSettings) : this(jsonSerializerSettings)
{
HypermediaResolver = hypermediaConfiguration ??
throw new ArgumentNullException(nameof(hypermediaConfiguration));
if (hypermediaConfiguration == null)
{
throw new ArgumentNullException(nameof(hypermediaConfiguration));
}

HypermediaResolver = hypermediaConfiguration;
}

public IHypermediaResolver HypermediaResolver { get; }
Expand All @@ -40,45 +47,44 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
if (linksBackup.Count == 0)
resource.Links = null; // avoid serialization

var localJsonSerializer = JsonSerializer.Create();
localJsonSerializer.CheckAdditionalContent = serializer.CheckAdditionalContent;
localJsonSerializer.Context = serializer.Context;
localJsonSerializer.ContractResolver = serializer.ContractResolver;
localJsonSerializer.ConstructorHandling = serializer.ConstructorHandling;
foreach (var converter in serializer.Converters.Where(converter => converter != this))
{
localJsonSerializer.Converters.Add(converter);
}

localJsonSerializer.Culture = serializer.Culture;
localJsonSerializer.DateFormatHandling = serializer.DateFormatHandling;
localJsonSerializer.DateFormatString = serializer.DateFormatString;
localJsonSerializer.DateParseHandling = serializer.DateParseHandling;
localJsonSerializer.DateTimeZoneHandling = serializer.DateTimeZoneHandling;
localJsonSerializer.DefaultValueHandling = serializer.DefaultValueHandling;
localJsonSerializer.EqualityComparer = serializer.EqualityComparer;
localJsonSerializer.FloatFormatHandling = serializer.FloatFormatHandling;
localJsonSerializer.FloatParseHandling = serializer.FloatParseHandling;
localJsonSerializer.Formatting = serializer.Formatting;
localJsonSerializer.MaxDepth = serializer.MaxDepth;
localJsonSerializer.MetadataPropertyHandling = serializer.MetadataPropertyHandling;
localJsonSerializer.MissingMemberHandling = serializer.MissingMemberHandling;
localJsonSerializer.NullValueHandling = serializer.NullValueHandling;
localJsonSerializer.ObjectCreationHandling = serializer.ObjectCreationHandling;
localJsonSerializer.PreserveReferencesHandling = serializer.PreserveReferencesHandling;
localJsonSerializer.ReferenceLoopHandling = serializer.ReferenceLoopHandling;
localJsonSerializer.ReferenceResolver = serializer.ReferenceResolver;
localJsonSerializer.SerializationBinder = serializer.SerializationBinder;
localJsonSerializer.StringEscapeHandling = serializer.StringEscapeHandling;
localJsonSerializer.TraceWriter = serializer.TraceWriter;
localJsonSerializer.TypeNameAssemblyFormatHandling = serializer.TypeNameAssemblyFormatHandling;
localJsonSerializer.TypeNameHandling = serializer.TypeNameHandling;

resource.ConverterContext = GetResourceConverterContext();

var localJsonSerializer = JsonSerializer.Create(new JsonSerializerSettings
{
CheckAdditionalContent = _jsonSerializerSettings.CheckAdditionalContent,
ConstructorHandling = _jsonSerializerSettings.ConstructorHandling,
Context = serializer.Context,
ContractResolver = _jsonSerializerSettings.ContractResolver,
Converters = _jsonSerializerSettings.Converters.Where(converter => converter != this).ToList(),
Culture = _jsonSerializerSettings.Culture,
DateFormatHandling = _jsonSerializerSettings.DateFormatHandling,
DateFormatString = _jsonSerializerSettings.DateFormatString,
DateParseHandling = _jsonSerializerSettings.DateParseHandling,
DateTimeZoneHandling = _jsonSerializerSettings.DateTimeZoneHandling,
DefaultValueHandling = _jsonSerializerSettings.DefaultValueHandling,
EqualityComparer = _jsonSerializerSettings.EqualityComparer,
Error = _jsonSerializerSettings.Error,
FloatFormatHandling = _jsonSerializerSettings.FloatFormatHandling,
FloatParseHandling = _jsonSerializerSettings.FloatParseHandling,
Formatting = _jsonSerializerSettings.Formatting,
MaxDepth = _jsonSerializerSettings.MaxDepth,
MetadataPropertyHandling = _jsonSerializerSettings.MetadataPropertyHandling,
MissingMemberHandling = _jsonSerializerSettings.MissingMemberHandling,
NullValueHandling = _jsonSerializerSettings.NullValueHandling,
ObjectCreationHandling = _jsonSerializerSettings.ObjectCreationHandling,
PreserveReferencesHandling = _jsonSerializerSettings.PreserveReferencesHandling,
ReferenceLoopHandling = _jsonSerializerSettings.ReferenceLoopHandling,
ReferenceResolverProvider = _jsonSerializerSettings.ReferenceResolverProvider,
SerializationBinder = _jsonSerializerSettings.SerializationBinder,
StringEscapeHandling = _jsonSerializerSettings.StringEscapeHandling,
TraceWriter = _jsonSerializerSettings.TraceWriter,
TypeNameAssemblyFormatHandling = _jsonSerializerSettings.TypeNameAssemblyFormatHandling,
TypeNameHandling = _jsonSerializerSettings.TypeNameHandling
});
localJsonSerializer.Serialize(writer, resource);

if (linksBackup.Count == 0)
resource.Links = linksBackup;
resource.Links = linksBackup;
}

public override object ReadJson(JsonReader reader, Type objectType, object existingValue,
Expand Down
4 changes: 2 additions & 2 deletions WebApi.Hal/JsonHalMediaTypeInputFormatter.cs
Expand Up @@ -23,14 +23,14 @@ public JsonHalMediaTypeInputFormatter(ILogger logger, JsonSerializerSettings ser
throw new ArgumentNullException(nameof(hypermediaResolver));
}

_resourceConverter = new ResourceConverter(hypermediaResolver);
_resourceConverter = new ResourceConverter(hypermediaResolver, SerializerSettings);
Initialize();
}

public JsonHalMediaTypeInputFormatter(ILogger logger, JsonSerializerSettings serializerSettings, ArrayPool<char> charPool, ObjectPoolProvider objectPoolProvider, MvcOptions mvcOptions, MvcJsonOptions mvcJsonOptions)
: base(logger, serializerSettings, charPool, objectPoolProvider, mvcOptions, mvcJsonOptions)
{
_resourceConverter = new ResourceConverter();
_resourceConverter = new ResourceConverter(SerializerSettings);
Initialize();
}

Expand Down
4 changes: 2 additions & 2 deletions WebApi.Hal/JsonHalMediaTypeOutputFormatter.cs
Expand Up @@ -28,7 +28,7 @@ public class JsonHalMediaTypeOutputFormatter : JsonOutputFormatter
throw new ArgumentNullException(nameof(hypermediaResolver));
}

_resourceConverter = new ResourceConverter(hypermediaResolver);
_resourceConverter = new ResourceConverter(hypermediaResolver, SerializerSettings);
Initialize();
}

Expand All @@ -37,7 +37,7 @@ public class JsonHalMediaTypeOutputFormatter : JsonOutputFormatter
ArrayPool<char> charPool) :
base(serializerSettings, charPool)
{
_resourceConverter = new ResourceConverter();
_resourceConverter = new ResourceConverter(SerializerSettings);
Initialize();
}

Expand Down

0 comments on commit 7ea66ed

Please sign in to comment.