diff --git a/src/JsonApiDotNetCore/Serialization/Response/ResourceObjectTreeNode.cs b/src/JsonApiDotNetCore/Serialization/Response/ResourceObjectTreeNode.cs index 4c3a44fe38..6226d6e597 100644 --- a/src/JsonApiDotNetCore/Serialization/Response/ResourceObjectTreeNode.cs +++ b/src/JsonApiDotNetCore/Serialization/Response/ResourceObjectTreeNode.cs @@ -181,13 +181,14 @@ public IList GetResponseIncluded() VisitRelationshipChildrenInSubtree(child, visited); } - List includes = visited.Select(node => node.ResourceObject).ToList(); + ISet primaryResourceObjectSet = GetDirectChildren().Select(node => node.ResourceObject).ToHashSet(ResourceObjectComparer.Instance); + List includes = new(); - foreach (ResourceObject primaryResourceObject in GetDirectChildren().Select(node => node.ResourceObject)) + foreach (ResourceObject include in visited.Select(node => node.ResourceObject)) { - if (includes.Contains(primaryResourceObject, ResourceObjectComparer.Instance)) + if (!primaryResourceObjectSet.Contains(include)) { - includes.Remove(primaryResourceObject); + includes.Add(include); } }