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();
- }
- }
- }
|