コード例 #1
0
 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);
 }
コード例 #2
0
 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);
     }
 }
コード例 #3
0
            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();
            }
コード例 #4
0
 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);
     }
 }
コード例 #5
0
 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);
 }
コード例 #6
0
 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);
     }
 }
コード例 #7
0
 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)
         {
         }
     }
 }
コード例 #8
0
            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();
            }
コード例 #9
0
 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('>');
 }
コード例 #10
0
            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);
            }