Skip to content

Commit f34ba32

Browse files
author
Bart Koelman
committed
Added tests for serialization callbacks
1 parent bc1de6a commit f34ba32

21 files changed

+1433
-9
lines changed

src/JsonApiDotNetCore/Serialization/FieldsToSerialize.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ public class FieldsToSerialize : IFieldsToSerialize
1919
private readonly IJsonApiRequest _request;
2020
private readonly SparseFieldSetCache _sparseFieldSetCache;
2121

22+
/// <inheritdoc />
23+
public bool ShouldSerialize => _request.Kind != EndpointKind.Relationship;
24+
2225
public FieldsToSerialize(IResourceContextProvider resourceContextProvider, IEnumerable<IQueryConstraintProvider> constraintProviders,
2326
IResourceDefinitionAccessor resourceDefinitionAccessor, IJsonApiRequest request)
2427
{
@@ -35,7 +38,7 @@ public IReadOnlyCollection<AttrAttribute> GetAttributes(Type resourceType)
3538
{
3639
ArgumentGuard.NotNull(resourceType, nameof(resourceType));
3740

38-
if (_request.Kind == EndpointKind.Relationship)
41+
if (!ShouldSerialize)
3942
{
4043
return Array.Empty<AttrAttribute>();
4144
}
@@ -56,7 +59,7 @@ public IReadOnlyCollection<RelationshipAttribute> GetRelationships(Type resource
5659
{
5760
ArgumentGuard.NotNull(resourceType, nameof(resourceType));
5861

59-
if (_request.Kind == EndpointKind.Relationship)
62+
if (!ShouldSerialize)
6063
{
6164
return Array.Empty<RelationshipAttribute>();
6265
}

src/JsonApiDotNetCore/Serialization/IFieldsToSerialize.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ namespace JsonApiDotNetCore.Serialization
1010
/// </summary>
1111
public interface IFieldsToSerialize
1212
{
13+
/// <summary>
14+
/// Indicates whether attributes and relationships should be serialized, based on the current endpoint.
15+
/// </summary>
16+
bool ShouldSerialize { get; }
17+
1318
/// <summary>
1419
/// Gets the collection of attributes that are to be serialized for resources of type <paramref name="resourceType" />.
1520
/// </summary>

src/JsonApiDotNetCore/Serialization/RequestDeserializer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public object Deserialize(string body)
6464

6565
object instance = DeserializeBody(body);
6666

67-
if (instance is IIdentifiable resource)
67+
if (instance is IIdentifiable resource && _request.Kind != EndpointKind.Relationship)
6868
{
6969
_resourceDefinitionAccessor.OnDeserialize(resource);
7070
}

src/JsonApiDotNetCore/Serialization/ResponseSerializer.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ private string SerializeErrorDocument(ErrorDocument errorDocument)
9696
/// </remarks>
9797
internal string SerializeSingle(IIdentifiable resource)
9898
{
99-
if (resource != null)
99+
if (resource != null && _fieldsToSerialize.ShouldSerialize)
100100
{
101101
_resourceDefinitionAccessor.OnSerialize(resource);
102102
}
@@ -128,9 +128,12 @@ internal string SerializeSingle(IIdentifiable resource)
128128
/// </remarks>
129129
internal string SerializeMany(IReadOnlyCollection<IIdentifiable> resources)
130130
{
131-
foreach (IIdentifiable resource in resources)
131+
if (_fieldsToSerialize.ShouldSerialize)
132132
{
133-
_resourceDefinitionAccessor.OnSerialize(resource);
133+
foreach (IIdentifiable resource in resources)
134+
{
135+
_resourceDefinitionAccessor.OnSerialize(resource);
136+
}
134137
}
135138

136139
IReadOnlyCollection<AttrAttribute> attributes = _fieldsToSerialize.GetAttributes(_primaryResourceType);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
namespace JsonApiDotNetCoreExampleTests.IntegrationTests.AtomicOperations.ResourceDefinitions.Serialization
2+
{
3+
public sealed class AtomicSerializationHitCounter
4+
{
5+
internal int DeserializeCount { get; private set; }
6+
internal int SerializeCount { get; private set; }
7+
8+
internal void Reset()
9+
{
10+
DeserializeCount = 0;
11+
SerializeCount = 0;
12+
}
13+
14+
internal void IncrementDeserializeCount()
15+
{
16+
DeserializeCount++;
17+
}
18+
19+
internal void IncrementSerializeCount()
20+
{
21+
SerializeCount++;
22+
}
23+
}
24+
}

0 commit comments

Comments
 (0)