private JToken SerializeData(ResourceGraph graph) { var isCollection = _value.IsCollectionType(); var tokens = graph.DataNodes.Select(n => SerializeNode(n, isCollection)); if (isCollection) { if (!tokens.Any()) { return(new JArray()); } else { return(JArray.FromObject(tokens)); } } else { if (!tokens.Any()) { return(JValue.CreateNull()); } else { return(tokens.First()); } } }
private JArray SerializeIncludes(ResourceGraph graph) { var nodes = graph.IncludedNodes; // if we have an including context and DisableDefaultIncluded is set if (_includingContext != null && _includingContext.DisableDefaultIncluded) { // if we have specific includes filter nodes otherwise bail with null if (_includingContext.Includes != null) { nodes = nodes.Where(n => _includingContext.Includes.Any(p => p.Name == n.PropertyName)); } else { return(null); } } var tokens = nodes.Select(n => SerializeNode(n, true)); if (!tokens.Any()) { return(null); } else { return(JArray.FromObject(tokens)); } }
public JObject Serialize(JsonSerializer serializer) { serializer.ContractResolver = new JsonApiContractResolver(_propertyNameConverter); _serializer = serializer; _sourceSerializer = JsonApiSerializer.GetJsonSerializer(_serializer.Converters); _sourceSerializer.ContractResolver = new SourceContractResolver(_propertyNameConverter, _resource); if (_value == null) { return(SerializeNull()); } var graph = new ResourceGraph(_value, _resource, _includedGraphPaths); var dataSection = SerializeData(graph); var includesSection = SerializeIncludes(graph); var metaSection = SerializeMetadata(); var result = new JObject { ["data"] = dataSection }; var isCollection = _value.IsCollectionType(); string id = null; if (!isCollection) { id = dataSection["id"]?.ToString(); } var links = CreateTopLevelLinks(dataSection is JArray ? dataSection.Count() : 0, id); if (links.HasValues) { result.Add("links", links); } if (includesSection != null && includesSection.Count > 0) { result["included"] = includesSection; } if (metaSection != null) { result["meta"] = metaSection; } return(result); }
public JObject Serialize(JsonSerializer serializer) { serializer.ContractResolver = new JsonApiContractResolver(); _serializer = serializer; if (_value == null) { return(SerializeNull()); } var graph = new ResourceGraph(_value, _resource, _includedGraphPaths); var dataSection = SerializeData(graph); var includesSection = SerializeIncludes(graph); var metaSection = SerializeMetadata(); var result = new JObject { ["data"] = dataSection }; var links = CreateTopLevelLinks(dataSection is JArray ? dataSection.Count() : 0); if (links.HasValues) { result.Add("links", links); } if (includesSection != null && includesSection.Count > 0) { result["included"] = includesSection; } if (metaSection != null) { result["meta"] = metaSection; } return(result); }