예제 #1
0
        /// <inheritdoc />
        /// <remarks>Default simple implementation to be overriden if needed.</remarks>
        public virtual TreeNode AfterJsonTextChange(string jsonString)
        {
            var jTokenRoot = new JTokenRoot(jsonString);

            if (JTokenTag.Parent != null)
            {
                JTokenTag.Replace(jTokenRoot.JTokenValue);
            }

            return(InsertInParent(JsonTreeNodeFactory.Create(jTokenRoot.JTokenValue), true));
        }
예제 #2
0
 /// <summary>
 /// Adds 1 depth level in given node.
 /// </summary>
 /// <param name="node"></param>
 private static void ExpandTreeNodeDepth(JTokenTreeNode node)
 {
     if (node.Nodes.Count > 0)
     {
         foreach (JTokenTreeNode childNode in node.Nodes)
         {
             ExpandTreeNodeDepth(childNode);
         }
     }
     else
     {
         foreach (var jToken in node.JTokenTag)
         {
             node.Nodes.Add(JsonTreeNodeFactory.Create(jToken, 1));
         }
     }
 }
        /// <summary>
        /// Add a new <see cref="JToken"/> instance in current <see cref="JArrayTreeNode"/>
        /// </summary>
        /// <param name="newJToken"></param>
        private void InsertJToken(JToken newJToken)
        {
            var jArrayTreeNode = JTokenNode as JArrayTreeNode;

            if (jArrayTreeNode == null)
            {
                return;
            }

            jArrayTreeNode.JArrayTag.AddFirst(newJToken);

            TreeNode newTreeNode = JsonTreeNodeFactory.Create(newJToken);

            jArrayTreeNode.Nodes.Insert(0, newTreeNode);

            jArrayTreeNode.TreeView.SelectedNode = newTreeNode;
        }
예제 #4
0
        private void InsertProperty(object propertyValue)
        {
            var jObjectTreeNode = JTokenNode as JObjectTreeNode;

            if (jObjectTreeNode == null)
            {
                return;
            }

            var newJProperty = new JProperty("name" + DateTime.Now.Ticks, propertyValue);

            jObjectTreeNode.JObjectTag.AddFirst(newJProperty);

            var jPropertyTreeNode = (JPropertyTreeNode)JsonTreeNodeFactory.Create(newJProperty);

            jObjectTreeNode.Nodes.Insert(0, jPropertyTreeNode);

            jObjectTreeNode.TreeView.SelectedNode = jPropertyTreeNode;
        }
예제 #5
0
        /// <inheritdoc />
        public override TreeNode AfterJsonTextChange(string jsonString)
        {
            if (CheckEmptyJsonString(jsonString))
            {
                return(null);
            }

            // To allow parsing, the partial json string is first enclosed as a json object

            var jTokenRoot = new JTokenRoot("{" + jsonString + "}");

            // Extract the contained JProperties as the JObject was only a container
            // As Json.NET internally clones JToken instances having Parent!=null when inserting in a JContainer,
            // explicitly clones the new JProperties to nullify Parent and to know of the instances
            var jParsedProperties = ((JObject)jTokenRoot.JTokenValue).Properties()
                                    .Select(p => new JProperty(p))
                                    .ToList();

            // Update the properties of parent JObject by inserting jParsedProperties and removing edited JProperty
            var jObjectParent = (JObject)JPropertyTag.Parent;

            var jProperties = jObjectParent.Properties()
                              .SelectMany(p => ReferenceEquals(p, JPropertyTag) ? jParsedProperties : new List <JProperty> {
                p
            })
                              .Distinct(new JPropertyEqualityComparer())
                              .ToList();

            jObjectParent.ReplaceAll(jProperties);

            // Build a new list of TreeNodes for these JProperties
            var jParsedTreeNodes = jParsedProperties
                                   .Select(p => JsonTreeNodeFactory.Create(p))
                                   .Cast <JPropertyTreeNode>()
                                   .ToList();

            return(UpdateTreeNodes(jParsedTreeNodes));
        }