Exemple #1
0
        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());
                }
            }
        }
Exemple #2
0
        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));
            }
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }