Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Newtonsoft.Json;
- using Newtonsoft.Json.Linq;
- using SampleServiceWinForm.Properties;
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Drawing;
- using System.Globalization;
- using System.Windows.Forms;
- namespace SampleServiceWinForm.Helpers
- {
- public static class JsonTreeViewLoader
- {
- private static bool _initialized;
- #region *** [TreeViewToJson] ***
- public static string TreeViewToJson(this TreeView treeView)
- {
- Dictionary<string, dynamic> result = new Dictionary<string, dynamic>();
- TreeNodeCollection nodes = treeView.Nodes;
- foreach (TreeNode n in nodes)
- {
- result.Add(n.Text, PrintRecursive(n));
- }
- //return result;
- return JsonConvert.SerializeObject(result, Formatting.Indented).Replace("{}",string.Empty);
- }
- private static Dictionary<string, dynamic> PrintRecursive(this TreeNode treeNode)
- {
- Dictionary<string, dynamic> result = new Dictionary<string, dynamic>();
- foreach (TreeNode tn in treeNode.Nodes)
- {
- result.Add(tn.Text, PrintRecursive(tn));
- }
- return result;
- }
- #endregion *** [TreeViewToJson] ***
- #region *** [JsonToTreeView] ***
- public static void JsonToTreeView(this TreeView treeView, string json, string name)
- {
- if (string.IsNullOrWhiteSpace(json))
- {
- return;
- }
- treeView.Nodes.Clear();
- InitializeImages(treeView);
- var token = JToken.Parse(json);
- switch (token.Type)
- {
- case JTokenType.Array:
- var objArray = JArray.Parse(json);
- AddArrayNodes(objArray, name, treeView.Nodes);
- break;
- case JTokenType.Object:
- var objObject = JObject.Parse(json);
- AddObjectNodes(objObject, name, treeView.Nodes);
- break;
- default:
- throw new NotImplementedException();
- }
- }
- private static void AddObjectNodes(JObject @object, string name, TreeNodeCollection parent)
- {
- var node = BuildBasicNode(@object.Type, name);
- parent.Add(node);
- foreach (var property in @object.Properties())
- {
- AddTokenNodes(property.Value, property.Name, node.Nodes);
- }
- }
- private static void AddArrayNodes(JContainer array, string name, TreeNodeCollection parent)
- {
- var node = BuildBasicNode(array.Type, name);
- parent.Add(node);
- for (var i = 0; i < array.Count; i++)
- {
- AddTokenNodes(array[i], $"[{i}]", node.Nodes);
- }
- }
- private static void AddTokenNodes(JToken token, string name, TreeNodeCollection parent)
- {
- switch (token)
- {
- case JValue value:
- TreeNode node = BuildBasicNode(value.Type, $"{name}: {value.Value}");
- parent.Add(node);
- break;
- case JArray array:
- AddArrayNodes(array, name, parent);
- break;
- case JObject jObject:
- AddObjectNodes(jObject, name, parent);
- break;
- }
- }
- private static TreeNode BuildBasicNode(JTokenType type, string name)
- {
- var node = new TreeNode(name)
- {
- ImageKey = type.ToString(),
- SelectedImageKey = @"Selected"
- };
- return node;
- }
- private static void InitializeImages(this TreeView treeView)
- {
- if (_initialized) return;
- // Load the images in an ImageList.
- var imageList = new ImageList();
- var resourceSet = JsonTreeViewImages.ResourceManager.GetResourceSet(CultureInfo.InvariantCulture, true, false);
- if (resourceSet != null)
- {
- foreach (DictionaryEntry entry in resourceSet)
- {
- if (entry.Value is Bitmap value)
- {
- imageList.Images.Add((string)entry.Key, value);
- }
- }
- }
- // Assign the ImageList to the TreeView.
- treeView.ImageList = imageList;
- // Set the TreeView control's default image and selected image indexes.
- treeView.ImageIndex = 0;
- treeView.SelectedImageIndex = 1;
- // set our flag
- _initialized = true;
- }
- #endregion *** [JsonToTreeView] ***
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement