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