Skip to content

Commit 75e72b7

Browse files
committed
refactor(writer): move logic into serializer
1 parent c459700 commit 75e72b7

File tree

2 files changed

+52
-42
lines changed

2 files changed

+52
-42
lines changed

src/JsonApiDotNetCore/Formatters/JsonApiWriter.cs

Lines changed: 2 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -2,26 +2,20 @@
22
using System.Text;
33
using System.Threading.Tasks;
44
using JsonApiDotNetCore.Internal;
5-
using JsonApiDotNetCore.Models;
65
using JsonApiDotNetCore.Serialization;
7-
using JsonApiDotNetCore.Services;
86
using Microsoft.AspNetCore.Mvc.Formatters;
97
using Microsoft.Extensions.Logging;
10-
using Newtonsoft.Json;
118

129
namespace JsonApiDotNetCore.Formatters
1310
{
1411
public class JsonApiWriter : IJsonApiWriter
1512
{
1613
private readonly ILogger<JsonApiWriter> _logger;
17-
private readonly IJsonApiContext _jsonApiContext;
1814
private readonly IJsonApiSerializer _serializer;
1915

20-
public JsonApiWriter(IJsonApiContext jsonApiContext,
21-
IJsonApiSerializer serializer,
16+
public JsonApiWriter(IJsonApiSerializer serializer,
2217
ILoggerFactory loggerFactory)
2318
{
24-
_jsonApiContext = jsonApiContext;
2519
_serializer = serializer;
2620
_logger = loggerFactory.CreateLogger<JsonApiWriter>();
2721
}
@@ -58,36 +52,7 @@ public async Task WriteAsync(OutputFormatterWriteContext context)
5852

5953
private string GetResponseBody(object responseObject)
6054
{
61-
if (responseObject == null)
62-
return GetNullDataResponse();
63-
64-
if (responseObject.GetType() == typeof(Error) || _jsonApiContext.RequestEntity == null)
65-
return GetErrorJson(responseObject, _logger);
66-
6755
return _serializer.Serialize(responseObject);
68-
}
69-
70-
private string GetNullDataResponse()
71-
{
72-
return JsonConvert.SerializeObject(new Document
73-
{
74-
Data = null
75-
});
76-
}
77-
78-
private string GetErrorJson(object responseObject, ILogger logger)
79-
{
80-
if (responseObject.GetType() == typeof(Error))
81-
{
82-
var errors = new ErrorCollection();
83-
errors.Add((Error)responseObject);
84-
return errors.GetJson();
85-
}
86-
else
87-
{
88-
logger?.LogInformation("Response was not a JSONAPI entity. Serializing as plain JSON.");
89-
return JsonConvert.SerializeObject(responseObject);
90-
}
91-
}
56+
}
9257
}
9358
}

src/JsonApiDotNetCore/Serialization/JsonApiSerializer.cs

Lines changed: 50 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,80 @@
11
using System.Collections.Generic;
22
using JsonApiDotNetCore.Builders;
3+
using JsonApiDotNetCore.Internal;
34
using JsonApiDotNetCore.Models;
5+
using JsonApiDotNetCore.Services;
6+
using Microsoft.Extensions.Logging;
47
using Newtonsoft.Json;
58

69
namespace JsonApiDotNetCore.Serialization
710
{
811
public class JsonApiSerializer : IJsonApiSerializer
912
{
1013
private readonly IDocumentBuilder _documentBuilder;
14+
private readonly ILogger<JsonApiSerializer> _logger;
15+
private readonly IJsonApiContext _jsonApiContext;
1116

12-
public JsonApiSerializer(IDocumentBuilder documentBuilder)
17+
public JsonApiSerializer(
18+
IJsonApiContext jsonApiContext,
19+
IDocumentBuilder documentBuilder)
1320
{
21+
_jsonApiContext = jsonApiContext;
22+
_documentBuilder = documentBuilder;
23+
}
24+
25+
public JsonApiSerializer(
26+
IJsonApiContext jsonApiContext,
27+
IDocumentBuilder documentBuilder,
28+
ILoggerFactory loggerFactory)
29+
{
30+
_jsonApiContext = jsonApiContext;
1431
_documentBuilder = documentBuilder;
32+
_logger = loggerFactory?.CreateLogger<JsonApiSerializer>();
1533
}
1634

1735
public string Serialize(object entity)
1836
{
37+
if (entity == null)
38+
return GetNullDataResponse();
39+
40+
if (entity.GetType() == typeof(ErrorCollection) || _jsonApiContext.RequestEntity == null)
41+
return GetErrorJson(entity, _logger);
42+
1943
if (entity is IEnumerable<IIdentifiable>)
20-
return _serializeDocuments(entity);
44+
return SerializeDocuments(entity);
45+
46+
return SerializeDocument(entity);
47+
}
48+
49+
private string GetNullDataResponse()
50+
{
51+
return JsonConvert.SerializeObject(new Document
52+
{
53+
Data = null
54+
});
55+
}
2156

22-
return _serializeDocument(entity);
57+
private string GetErrorJson(object responseObject, ILogger logger)
58+
{
59+
if (responseObject is ErrorCollection errorCollection)
60+
{
61+
return errorCollection.GetJson();
62+
}
63+
else
64+
{
65+
logger?.LogInformation("Response was not a JSONAPI entity. Serializing as plain JSON.");
66+
return JsonConvert.SerializeObject(responseObject);
67+
}
2368
}
2469

25-
private string _serializeDocuments(object entity)
70+
private string SerializeDocuments(object entity)
2671
{
2772
var entities = entity as IEnumerable<IIdentifiable>;
2873
var documents = _documentBuilder.Build(entities);
2974
return _serialize(documents);
3075
}
3176

32-
private string _serializeDocument(object entity)
77+
private string SerializeDocument(object entity)
3378
{
3479
var identifiableEntity = entity as IIdentifiable;
3580
var document = _documentBuilder.Build(identifiableEntity);

0 commit comments

Comments
 (0)