public static string ToHtml(IPrintable printable) { Dictionary <string, IPrintable> map = printable.GetItems(); string name = SecurityElement.Escape(printable.ToString()); if (map == null || map.Count == 0) { return(name); } StringBuilder sb = new StringBuilder(); sb.AppendLine("<div>"); //if (printable is ReflectionPrintable) sb.AppendFormat("<b>{0}</b><br />\n", name); foreach (var item in map) { string key = SecurityElement.Escape(item.Key); string itemHtml = ToHtml(item.Value); if (!(item.Value is LeafPrintable)) { itemHtml = "\n" + string.Join("\n", itemHtml.Split('\n').Select(x => " " + x)); sb.AppendFormat("<i>{0}</i>: <a href='#' onclick='toggle(this); return false;'>{1}</a>\n", key, SecurityElement.Escape(item.Value.ToString())); sb.AppendFormat("<div class='hidden'>{0}</div>\n", itemHtml); } else { sb.AppendFormat("<i>{0}</i>: {1}<br/>\n", key, itemHtml); } } sb.AppendLine("</div>"); return(sb.ToString()); }