Inheritance: System.Dynamic.DynamicObject
Exemplo n.º 1
0
        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
            result = null;
            if (xElement.Elements().All(x => x.DynamicCompatableName() != binder.Name) && binder.Name != xElement.DynamicCompatableName())
            {
                return(true);
            }

            var xElements = xElement.Elements().Where(x => x.DynamicCompatableName() == binder.Name);

            if (xElements.Count() == 1)
            {
                var element = xElements.First();
                ConvertAttributesToElements(element);
                var childElements = element.Elements().Select(x => x.DynamicCompatableName());
                if (childElements.Count() > 1 && childElements.Distinct().Count() == 1)
                {
                    result = element.Elements().Select(x => new DynamicXml(x)).ToArray();
                }
                else
                {
                    result = new DynamicXml(element);
                }
            }
            else if (!xElements.Any() && binder.Name == xElement.DynamicCompatableName())
            {
                result = this;
            }
            else
            {
                result = xElements.Select(x => new DynamicXml(x)).ToArray();
            }
            return(true);
        }
Exemplo n.º 2
0
        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
            result = null;
            if (xElement.Elements().All(x => x.DynamicCompatableName() != binder.Name) && binder.Name != xElement.DynamicCompatableName())
                return false;

            var xElements = xElement.Elements().Where(x => x.DynamicCompatableName() == binder.Name);
            if (xElements.Count() == 1)
            {
                var element = xElements.First();
                foreach (var xAttribute in element.Attributes())
                {
                    element.Add(new XElement(xAttribute.Name, xAttribute.Value));
                    xAttribute.Remove();
                }
                var childElements = element.Elements().Select(x => x.DynamicCompatableName());
                if (childElements.Count() > 1 && childElements.Distinct().Count() == 1)
                {
                    result = element.Elements().Select(x => new DynamicXml(x)).ToArray();
                }
                else
                    result = new DynamicXml(element);
            }
            else if (!xElements.Any() && binder.Name == xElement.DynamicCompatableName())
                result = this;
            else
                result = xElements.Select(x => new DynamicXml(x)).ToArray();
            return true;
        }
Exemplo n.º 3
0
        public override bool TryGetMember(GetMemberBinder binder, out object result)
        {
            result = null;
            if (xElement.Elements().All(x => x.DynamicCompatableName() != binder.Name) && binder.Name != xElement.DynamicCompatableName())
                return true;

            var xElements = xElement.Elements().Where(x => x.DynamicCompatableName() == binder.Name);
            if (xElements.Count() == 1)
            {
                var element = xElements.First();
                ConvertAttributesToElements(element);
                var childElements = element.Elements().Select(x => x.DynamicCompatableName());
                if (childElements.Count() > 1 && childElements.Distinct().Count() == 1)
                {
                    result = element.Elements().Select(x => new DynamicXml(x)).ToArray();
                }
                else
                    result = new DynamicXml(element);
            }
            else if (!xElements.Any() && binder.Name == xElement.DynamicCompatableName())
                result = this;
            else
                result = xElements.Select(x => new DynamicXml(x)).ToArray();
            return true;
        }