コード例 #1
0
ファイル: JsonString.cs プロジェクト: adamjmoon/Restful
        public static void Parse(StringBuilder stringBuilder, string name, dynamic o, int tab)
        {
            if (o is JsonToDynamic)
            {
                if (o.UnderlyingObject() is Dictionary<string, object>)
                {
                    WriteName(stringBuilder, tab, name, "dynamic", null);

                    var dictionary = o.UnderlyingObject() as Dictionary<string, object>;

                    foreach (KeyValuePair<string, object> kvp in dictionary)
                    {
                        Parse(stringBuilder, kvp.Key, kvp.Value, tab);
                    }
                }

                if (o.UnderlyingObject() is IEnumerable<dynamic>)
                {
                    Parse(stringBuilder, name, o.UnderlyingObject(), tab - 1);
                }
            }
            else if (o is JObject)
            {
                var jObject = (o as JObject);

                WriteName(stringBuilder, tab + 1, name, "dynamic", null);

                foreach (var item in jObject)
                {
                    Parse(stringBuilder, item.Key, item.Value, tab + 2);
                }
            }
            else if (o is JValue)
            {
                var meta = "null";

                if (o.Value != null)
                {
                    meta = o.Value.GetType().Name;
                }

                WriteName(stringBuilder, tab + 1, name, meta, o.Value);
            }
            else if (o is IEnumerable<dynamic>)
            {
                WriteName(stringBuilder, tab + 1, name, "IEnumerable<dynamic>", null);
                int index = 0;
                foreach (var r in o as IEnumerable<dynamic>)
                {
                    Parse(stringBuilder, string.Format("[{0}]", index), r, tab + 2);
                    index++;
                }
            }
            else if (o is JArray)
            {
                WriteName(stringBuilder, tab + 1, name, "IEnumerable<dynamic>", null);
                int index = 0;
                foreach (var r in o as JArray)
                {
                    Parse(stringBuilder, string.Format("[{0}]", index), r, tab + 2);
                    index++;
                }
            }
            else
            {
                if (o != null)
                {
                    WriteName(stringBuilder, tab, name, o.GetType().Name, o);
                }
            }
        }