private void ResultsReceived(Object data) { var writer = new StringWriter(); var dumper = new ObjectTextDumper(writer); dumper.Dump(data); Paragraph paragraph = new Paragraph(); Bold recv = new Bold(); var converter = new System.Windows.Media.BrushConverter(); recv.Foreground = (Brush)converter.ConvertFromString("#FF8ACCCF"); recv.FontSize = 14.0; recv.Inlines.Add("Event Received :" + Environment.NewLine); paragraph.Inlines.Add(recv); Span text = new Span(); text.Foreground = (Brush)converter.ConvertFromString("#FFDFDFBF"); text.Inlines.Add(writer.GetStringBuilder().ToString()); paragraph.Inlines.Add(text); View.console.Document.Blocks.Add(paragraph); View.scroller.ScrollToBottom(); }
internal static bool TryFind( ObjectTextDumper objectTextDumper, object obj, ClassDumpData classDumpData, out Script script) { if (objectTextDumper == null) { throw new ArgumentNullException(nameof(objectTextDumper)); } if (obj == null) { throw new ArgumentNullException(nameof(obj)); } script = null; var lookup = new ScriptLookup(obj.GetType(), classDumpData, objectTextDumper); _sync.EnterReadLock(); var found = _cache.TryGetValue(lookup, out script); if (!found) { found = _buildingNow.Contains(lookup); } _sync.ExitReadLock(); return(found); }
internal static Script Add( ObjectTextDumper objectTextDumper, Type objectType, ClassDumpData classDumpData, DumpScript _dumpScript) { if (objectTextDumper == null) { throw new ArgumentNullException(nameof(objectTextDumper)); } if (objectType == null) { throw new ArgumentNullException(nameof(objectType)); } if (_dumpScript == null) { throw new ArgumentNullException(nameof(_dumpScript)); } var lookup = new ScriptLookup(objectType, classDumpData, objectTextDumper); var script = _dumpScript.GetScriptAction(); _sync.EnterWriteLock(); _cache[lookup] = script; _buildingNow.Remove(lookup); _sync.ExitWriteLock(); return(script); }
public ScriptLookup( Type objectType, ClassDumpData classDumpData, ObjectTextDumper objectTextDumper) { if (objectTextDumper is null) { throw new ArgumentNullException(nameof(objectTextDumper)); } ObjectType = objectType ?? throw new ArgumentNullException(nameof(objectType)); ClassDumpData = classDumpData; PropertiesBindingFlags = objectTextDumper.PropertiesBindingFlags; FieldsBindingFlags = objectTextDumper.FieldsBindingFlags; }
internal static void BuildingScriptFor( ObjectTextDumper objectTextDumper, Type objectType, ClassDumpData classDumpData) { if (objectType == null) { throw new ArgumentNullException(nameof(objectType)); } _sync.EnterWriteLock(); _buildingNow.Add(new ScriptLookup(objectType, classDumpData, objectTextDumper)); _sync.ExitWriteLock(); }
static void Main() { int anInt = 5; var anObject = new MyClass { BoolProperty = true, IntProperty = 3, GuidProperty = Guid.Empty, }; #if false // Initial fully spelled-out version: using (var writer = new StringWriter()) { var dumper = new ObjectTextDumper(writer); // dump a primitive value: dumper.Dump(anInt); // dump complex value: dumper.Dump(anObject); Console.WriteLine(writer.GetStringBuilder().ToString()); } #elif false // Alternative #1. Use the DumpText() extension method: using (var writer = new StringWriter()) { anInt.DumpText(writer); anObject.DumpText(writer); Console.WriteLine(writer.GetStringBuilder().ToString()); } #elif true // Alternative #2. Use the DumpString() extension method: Console.WriteLine(anInt.DumpString()); Console.WriteLine(anObject.DumpString()); #elif false // Alternative #3. Override MyClass.ToString() Console.WriteLine(anInt.DumpString()); Console.WriteLine(anObject.ToString()); #endif Console.Write("Press any key to finish..."); Console.ReadKey(true); }
private DumpState( ObjectTextDumper dumper, object instance, Type type, ClassDumpData classDumpData, DumpAttribute instanceDumpAttribute, DumpScript dumpScript, bool isTopLevelClass) { _dumper = dumper ?? throw new ArgumentNullException(nameof(dumper)); _isTopLevelClass = isTopLevelClass; Instance = instance ?? throw new ArgumentNullException(nameof(instance)); InstanceType = instance.GetType(); CurrentType = type ?? throw new ArgumentNullException(nameof(type)); ClassDumpData = classDumpData; InstanceDumpAttribute = instanceDumpAttribute ?? throw new ArgumentNullException(nameof(instanceDumpAttribute)); DumpScript = dumpScript; if (_isTopLevelClass) { var defaultProperty = DefaultProperty; if (!defaultProperty.IsNullOrWhiteSpace()) { var pi = CurrentType.GetProperty(defaultProperty); Enumerator = pi != null ? (new MemberInfo[] { pi }).AsEnumerable().GetEnumerator() : (new MemberInfo[] { }).AsEnumerable().GetEnumerator(); return; } } Enumerator = CurrentType.GetProperties(_dumper.PropertiesBindingFlags | BindingFlags.DeclaredOnly) .Union <MemberInfo>( CurrentType.GetFields(_dumper.FieldsBindingFlags | BindingFlags.DeclaredOnly)) .Where(mi => !mi.Name.StartsWith("<", StringComparison.Ordinal)) .OrderBy(p => p, ServiceResolver .Default .GetInstance <IMemberInfoComparer>() .SetMetadata(ClassDumpData.Metadata)) .GetEnumerator(); }
public DumpState( ObjectTextDumper dumper, object instance, ClassDumpData classDumpData, bool buildScript) : this(dumper, instance, instance.GetType(), classDumpData, classDumpData.DumpAttribute, null, true) { if (dumper == null) { throw new ArgumentNullException(nameof(dumper)); } if (instance == null) { throw new ArgumentNullException(nameof(instance)); } // let's not create script if we don't need it or are not doing anything here. if (buildScript && CurrentType != typeof(object)) { DumpScript = new DumpScript(instance.GetType()); } DecrementMaxDepth(); }
public static object DumpText( this object value, TextWriter writer, int indentLevel = 0, Type dumpMetadata = null, DumpAttribute dumpAttribute = null) { if (writer == null) { throw new ArgumentNullException(nameof(writer)); } try { using (var dumper = new ObjectTextDumper(writer)) dumper.Dump(value, dumpMetadata, dumpAttribute, indentLevel); } catch (Exception x) { writer.WriteLine($"\n\nATTENTION:\nThe TextDumper threw an exception:\n{x.ToString()}"); } return(value); }