public static IEnumerator XElementDegrapher(IObjectDegrapher caller, object arg) { switch (arg) { case XAttribute att: yield return(att.Name); yield return(att.Value); break; case XElement element: if (element.HasElements == false) { yield return(element.Value); } foreach (var child in element.Attributes()) { yield return(child); } foreach (var child in element.Elements()) { yield return(child); } break; case XName name: yield return(name.LocalName); yield return(name.NamespaceName); break; case XDocument document: yield return(document.Root); break; case string _: yield return(arg); break; } }
public static IEnumerator JsonDegrapher(IObjectDegrapher caller, object arg) { switch (arg) { case JToken array: foreach (var entry in array.Children()) { yield return(entry); } break; case string _: yield return(arg); break; } }
public static IEnumerator GenericDegrapher(IObjectDegrapher caller, object arg) { var type = arg.GetType().GetElementTypeOfEnumerable(); if (type == null) { yield return(arg); yield break; } var items = (IEnumerable)arg; foreach (var child in items.Cast <object>()) { yield return(child); } }
public static IEnumerator HtmlDegrapher(IObjectDegrapher caller, object arg) { switch (arg) { case ICharacterData text: yield return(text.Data); break; case INode element: foreach (var node in element.ChildNodes) { yield return(node); } break; } }