private void FormatDictionaryMembers( CommonObjectFormatter.Builder result, IDictionary dict) { result.AppendGroupOpening(); int num = 0; try { IDictionaryEnumerator enumerator = dict.GetEnumerator(); using (enumerator as IDisposable) { while (enumerator.MoveNext()) { DictionaryEntry entry = enumerator.Entry; result.AppendCollectionItemSeparator(num == 0); result.AppendGroupOpening(); result.AppendCollectionItemSeparator(true); this.FormatObjectRecursive(result, entry.Key, false); result.AppendCollectionItemSeparator(false); this.FormatObjectRecursive(result, entry.Value, false); result.AppendGroupClosing(); ++num; } } } catch (Exception ex) { result.AppendCollectionItemSeparator(num == 0); this.FormatException(result, ex); result.Append(' '); } result.AppendGroupClosing(); }
public bool Append(CommonObjectFormatter.Builder result, string separator) { result.Append(this.GetDisplayName(), 0, int.MaxValue); result.Append(separator, 0, int.MaxValue); result.Append(this.Value, 0, int.MaxValue); return(true); }
private void FormatMembers( CommonObjectFormatter.Builder result, object obj) { RuntimeHelpers.EnsureSufficientExecutionStack(); result.Append(' '); if (!this.VisitedObjects.Add(obj)) { result.AppendInfiniteRecursionMarker(); } else { bool flag = false; if (obj is IDictionary dict) { this.FormatDictionaryMembers(result, dict); flag = true; } else if (obj is IEnumerable sequence) { this.FormatSequenceMembers(result, sequence); flag = true; } if (!flag) { this.FormatObjectMembers(result, obj); } this.VisitedObjects.Remove(obj); } }
private void FormatArray(CommonObjectFormatter.Builder result, Array array) { this.FormatCollectionHeader(result, array); if (array.Rank > 1) { this.FormatMultidimensionalArrayElements(result, array); } else { result.Append(' '); this.FormatSequenceMembers(result, array); } }
private void FormatKeyValuePair(CommonObjectFormatter.Builder result, object obj) { System.Reflection.TypeInfo typeInfo = IntrospectionExtensions.GetTypeInfo(obj.GetType()); object obj1 = typeInfo.GetDeclaredProperty("Key").GetValue(obj, Array.Empty <object>()); object obj2 = typeInfo.GetDeclaredProperty("Value").GetValue(obj, Array.Empty <object>()); result.AppendGroupOpening(); result.AppendCollectionItemSeparator(true); this.FormatObjectRecursive(result, obj1, false); result.AppendCollectionItemSeparator(false); this.FormatObjectRecursive(result, obj2, false); result.AppendGroupClosing(); }
private void ObjectToString(CommonObjectFormatter.Builder result, object obj) { try { string str = obj.ToString(); result.Append('['); result.Append(str, 0, int.MaxValue); result.Append(']'); } catch (Exception ex) { this.FormatException(result, ex); } }
private void FormatMultidimensionalArrayElements( CommonObjectFormatter.Builder result, Array array) { if (array.Length == 0) { result.AppendCollectionItemSeparator(true); result.AppendGroupOpening(); result.AppendGroupClosing(); } else { int[] numArray = new int[array.Rank]; for (int dimension = array.Rank - 1; dimension >= 0; --dimension) { numArray[dimension] = array.GetLowerBound(dimension); } int num1 = 0; int num2 = 0; while (true) { int dimension1 = numArray.Length - 1; while (numArray[dimension1] > array.GetUpperBound(dimension1)) { numArray[dimension1] = array.GetLowerBound(dimension1); result.AppendGroupClosing(); --num1; --dimension1; if (dimension1 < 0) { return; } ++numArray[dimension1]; } result.AppendCollectionItemSeparator(num2 == 0); for (int dimension2 = numArray.Length - 1; dimension2 >= 0 && numArray[dimension2] == array.GetLowerBound(dimension2); --dimension2) { result.AppendGroupOpening(); ++num1; result.AppendCollectionItemSeparator(true); } this.FormatObjectRecursive(result, array.GetValue(numArray), false); ++numArray[numArray.Length - 1]; ++num2; } } }
public bool AppendAsCollectionEntry(CommonObjectFormatter.Builder result) { if (this.HasKeyName()) { result.AppendGroupOpening(); result.AppendCollectionItemSeparator(true); result.Append(this.Name, 1, this.Name.Length - 2); result.AppendCollectionItemSeparator(false); result.Append(this.Value, 0, int.MaxValue); result.AppendGroupClosing(); } else { result.Append(this.Value, 0, int.MaxValue); } return(true); }
private void FormatCollectionHeader( CommonObjectFormatter.Builder result, ICollection collection) { if (collection is Array arrayOpt) { result.Append(this._formatter.TypeNameFormatter.FormatArrayTypeName(arrayOpt.GetType(), arrayOpt), 0, int.MaxValue); } else { result.Append(this._formatter.TypeNameFormatter.FormatTypeName(collection.GetType()), 0, int.MaxValue); try { result.Append('('); result.Append(collection.Count.ToString(), 0, int.MaxValue); result.Append(')'); } catch (Exception ex) { } } }
private void FormatSequenceMembers( CommonObjectFormatter.Builder result, IEnumerable sequence) { result.AppendGroupOpening(); int num = 0; try { foreach (object obj in sequence) { result.AppendCollectionItemSeparator(num == 0); this.FormatObjectRecursive(result, obj, false); ++num; } } catch (Exception ex) { result.AppendCollectionItemSeparator(num == 0); this.FormatException(result, ex); result.Append(" ...", 0, int.MaxValue); } result.AppendGroupClosing(); }
private void FormatObjectMembers( CommonObjectFormatter.Builder result, object obj) { List <CommonObjectFormatter.Visitor.FormattedMember> result1 = new List <CommonObjectFormatter.Visitor.FormattedMember>(); this.FormatObjectMembersRecursive(result1, obj); bool flag = CommonObjectFormatter.Visitor.UseCollectionFormat(result1, IntrospectionExtensions.GetTypeInfo(obj.GetType())); result.AppendGroupOpening(); for (int index = 0; index < result1.Count; ++index) { result.AppendCollectionItemSeparator(index == 0); if (flag) { result1[index].AppendAsCollectionEntry(result); } else { result1[index].Append(result, "="); } } result.AppendGroupClosing(); }
private void FormatException(CommonObjectFormatter.Builder result, Exception exception) { result.Append("!<", 0, int.MaxValue); result.Append(this._formatter.TypeNameFormatter.FormatTypeName(((object)exception).GetType()), 0, int.MaxValue); result.Append('>'); }
private CommonObjectFormatter.Builder FormatObjectRecursive( CommonObjectFormatter.Builder result, object obj, bool isRoot) { string str = this._formatter.PrimitiveFormatter.FormatPrimitive(obj, this._primitiveOptions); if (str != null) { result.Append(str, 0, int.MaxValue); return(result); } Type type = obj.GetType(); System.Reflection.TypeInfo typeInfo = IntrospectionExtensions.GetTypeInfo(type); if (typeInfo.IsGenericType && typeInfo.GetGenericTypeDefinition() == (object)typeof(KeyValuePair <,>)) { if (isRoot) { result.Append(this._formatter.TypeNameFormatter.FormatTypeName(type), 0, int.MaxValue); result.Append(' '); } this.FormatKeyValuePair(result, obj); return(result); } if (typeInfo.IsArray) { if (this.VisitedObjects.Add(obj)) { this.FormatArray(result, (Array)obj); this.VisitedObjects.Remove(obj); } else { result.AppendInfiniteRecursionMarker(); } return(result); } bool flag = false; ICollection collection = null; if (obj is ICollection) { collection = (ICollection)obj; this.FormatCollectionHeader(result, collection); } else if (ObjectFormatterHelpers.HasOverriddenToString(typeInfo)) { this.ObjectToString(result, obj); flag = true; } else { result.Append(this._formatter.TypeNameFormatter.FormatTypeName(type), 0, int.MaxValue); } if (!flag) { this.FormatMembers(result, obj); } return(result); }