private void Dump(object obj, TextWriter tw, int currentDepth) { // SPECIAL CASE - formatter is available if (obj != null) { IDumpFormatter formatter = Settings.GetFormatter(obj.GetType()); if (formatter != null) { tw.Write(formatter.Format(obj)); return; } } // SPECIAL CASE - primitive types: nulls, strings, numbers, characters... if (obj == null || obj is ValueType || obj is string) { _formatter.WriteValue(obj, tw); } //SPECIAL CASE - Lists, arrays... else if (obj is IEnumerable) { IEnumerable collection = obj as IEnumerable; foreach (object item in collection) { _formatter.NewLine(tw); Dump(item, tw, currentDepth); } } else { ObjectDump(obj, tw, currentDepth); } }
public void Dump(object obj, TextWriter tw) { Stack <TraverseNode> nodes = new Stack <TraverseNode>(); nodes.Push(new TraverseNode(string.Empty, string.Empty, obj, null, 0)); while (nodes.Count > 0) { TraverseNode node = nodes.Pop(); if (node.Level >= Settings.MaxDepth) { _formatter.WriteName(node.GetNames(), node.Level, tw, Settings.WriteElementType); _formatter.WriteText(string.Format("{0}{1}{2}{3}", "{", node.ItemType, "}", Environment.NewLine), 0, tw); } else { IDumpFormatter formatter = GetFormatter(node); bool processed = true; if (formatter != null) { _formatter.WriteName(node.GetNames(), node.Level, tw, Settings.WriteElementType); tw.Write(formatter.Format(node.Item)); } else { PrepareChildren(nodes, node, node.GetChildren(Settings)); processed = ProcessNode(nodes, node, tw); } if (processed && nodes.Count > 0) { _formatter.NewLine(tw); } } } }