예제 #1
0
        private static void OutputArray(IGrouping <XName, XElement> elementGroup, IdentityIndex.Identity identity, JObject result)
        {
            int n         = 0;
            var container = new JObject();

            foreach (var eachElement in elementGroup)
            {
                var item = new JObject();
                foreach (var attr in eachElement.AllAttributes().Where(attr => !attr.IsNamespaceDeclaration))
                {
                    if (IdentityIndex[attr.Name] != null)
                    {
                        item.Add(IdentityIndex[attr.Name].JsonName, attr.Value);
                    }
                    else
                    {
                        item.Add(attr.Name.LocalName, attr.Value);
                    }
                }
                container.Add((n++).ToString(), item);
            }
            result.Add(identity.JsonName, container);
        }
예제 #2
0
        private static void OutputKeyedArray(IGrouping <XName, XElement> elementGroup, IdentityIndex.Identity identity, JObject result)
        {
            var container = new JObject();

            foreach (var eachElement in elementGroup)
            {
                var item = new JObject();

                // add every attribute we have a match for.
                foreach (var attr in eachElement.AllAttributes().Where(attr => attr.Name != identity.Index && !attr.IsNamespaceDeclaration))
                {
                    item.Add(IdentityIndex[attr.Name].JsonName, attr.Value);
                }
                var indexValue = eachElement.GetAttribute(identity.Index);

                if (indexValue != null)
                {
                    container.Add(indexValue, item);
                }

                // handle child elements
                foreach (var childGroup in eachElement.Elements().GroupBy(each => each.Name))
                {
                    var i = IdentityIndex[childGroup.Key];

                    if (i != null)
                    {
                        // we know what type this is

                        if (i.Index != null)
                        {
                            // we know what attribute we want to use as an index.
                            OutputKeyedArray(childGroup, i, item);
                        }
                    }
                }
            }
            result.Add(identity.JsonName, container);
        }