/
JsonHalMediaTypeOutputFormatter.cs
58 lines (50 loc) · 2.03 KB
/
JsonHalMediaTypeOutputFormatter.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
using System;
using System.Buffers;
using System.Reflection;
using Microsoft.AspNetCore.Mvc.Formatters;
using Microsoft.Net.Http.Headers;
using Newtonsoft.Json;
using WebApi.Hal.JsonConverters;
namespace WebApi.Hal
{
public class JsonHalMediaTypeOutputFormatter : JsonOutputFormatter
{
private const string _mediaTypeHeaderValueName = "application/hal+json";
private readonly LinksConverter _linksConverter = new LinksConverter();
private readonly ResourceConverter _resourceConverter;
private readonly EmbeddedResourceConverter _embeddedResourceConverter = new EmbeddedResourceConverter();
public JsonHalMediaTypeOutputFormatter(
JsonSerializerSettings serializerSettings,
ArrayPool<char> charPool,
IHypermediaResolver hypermediaResolver) :
base(serializerSettings, charPool)
{
if (hypermediaResolver == null)
{
throw new ArgumentNullException(nameof(hypermediaResolver));
}
_resourceConverter = new ResourceConverter(hypermediaResolver, SerializerSettings);
Initialize();
}
public JsonHalMediaTypeOutputFormatter(
JsonSerializerSettings serializerSettings,
ArrayPool<char> charPool) :
base(serializerSettings, charPool)
{
_resourceConverter = new ResourceConverter(SerializerSettings);
Initialize();
}
private void Initialize()
{
SupportedMediaTypes.Add(new MediaTypeHeaderValue(_mediaTypeHeaderValueName));
SerializerSettings.Converters.Add(_linksConverter);
SerializerSettings.Converters.Add(_resourceConverter);
SerializerSettings.Converters.Add(_embeddedResourceConverter);
SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
}
protected override bool CanWriteType(Type type)
{
return typeof(Representation).IsAssignableFrom(type);
}
}
}