public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result) { if (indexes.Length == 1) { XElement element = _elements[Convert.ToInt32(indexes[0])]; result = new XmlNode(element); return true; } return base.TryGetIndex(binder, indexes, out result); }
public override bool TryGetMember(GetMemberBinder binder, out object result) { string name = binder.Name; if (String.CompareOrdinal(name, "Name") == 0) { result = _element.Name.LocalName; return true; } else if (String.CompareOrdinal(name, "Parent") == 0) { XElement parent = _element.Parent; if (parent != null) { result = new XmlNode(parent); return true; } result = null; return false; } else if (String.CompareOrdinal(name, "Value") == 0) { result = _element.Value; return true; } else if (String.CompareOrdinal(name, "Nodes") == 0) { result = new XmlNodeList(_element.Elements()); return true; } else if (String.CompareOrdinal(name, "Xml") == 0) { StringWriter sw = new StringWriter(); _element.Save(sw, SaveOptions.None); result = sw.ToString(); return true; } else { XAttribute attribute = _element.Attribute(name); if (attribute != null) { result = attribute.Value; return true; } XElement childNode = _element.Element(name); if (childNode != null) { if (childNode.HasElements == false) { result = childNode.Value; return true; } result = new XmlNode(childNode); return true; } } return base.TryGetMember(binder, out result); }
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result) { if (String.Compare(binder.Name, "Item", StringComparison.Ordinal) == 0) { if (args.Length == 1) { XElement element = _elements[System.Convert.ToInt32(args[0])]; result = new XmlNode(element); return true; } } return base.TryInvokeMember(binder, args, out result); }
private object ProcessResponse(Stream responseStream) { dynamic result = null; try { string responseText = (new StreamReader(responseStream)).ReadToEnd(); if (_service == RestService.Json) { JsonReader jsonReader = new JsonReader(responseText); result = jsonReader.ReadValue(); } else { responseText = StripXmlnsRegex.Replace(responseText, String.Empty); XDocument xmlDocument = XDocument.Parse(responseText); result = new XmlNode(xmlDocument.Root); } } catch { } return result; }