| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 | using System.Collections;using System.Collections.Generic;using System.Web.Script.Serialization;namespace MECF.Framework.UI.Core.ExtendedControls{    public class ObjectTreeNode    {        public string Name { get; set; }        public string Value { get; set; }        public List<ObjectTreeNode> Children { get; set; } = new List<ObjectTreeNode>();        public static ObjectTreeNode CreateTree(object obj)        {            JavaScriptSerializer jss = new JavaScriptSerializer();            var serialized = Newtonsoft.Json.JsonConvert.SerializeObject(obj);            Dictionary<string, object> dic = jss.Deserialize<Dictionary<string, object>>(serialized);            var root = new ObjectTreeNode();            root.Name = "Root";            BuildTree(dic, root);            return root;        }        private static void BuildTree(object item, ObjectTreeNode node)        {            if (item is KeyValuePair<string, object>)            {                KeyValuePair<string, object> kv = (KeyValuePair<string, object>) item;                ObjectTreeNode keyValueNode = new ObjectTreeNode();                keyValueNode.Name = kv.Key;                keyValueNode.Value = GetValueAsString(kv.Value);                node.Children.Add(keyValueNode);                BuildTree(kv.Value, keyValueNode);            }            else if (item is ArrayList)            {                ArrayList list = (ArrayList) item;                int index = 0;                foreach (object value in list)                {                    ObjectTreeNode arrayItem = new ObjectTreeNode();                    arrayItem.Name = $"[{index}]";                    arrayItem.Value = "";                    node.Children.Add(arrayItem);                    BuildTree(value, arrayItem);                    index++;                }            }            else if (item is Dictionary<string, object>)            {                Dictionary<string, object> dictionary = (Dictionary<string, object>) item;                foreach (KeyValuePair<string, object> d in dictionary)                {                    BuildTree(d, node);                }            }        }        private static string GetValueAsString(object value)        {            if (value == null)                return "null";            var type = value.GetType();            if (type.IsArray)            {                return "[]";            }            if (value is ArrayList)            {                var arr = value as ArrayList;                return $"[{arr.Count}]";            }            if (type.IsGenericType)            {                return "{}";            }            return value.ToString();        }    }}
 |