根据以下内容做扩展 兼容value为数组时的报错情况(3条消息) WinFrom Json数据绑定TreeView控件核心代码_CatchMe_439的博客-CSDN博客_json treeview
string json = string.Empty;
public void ConvertJson()
{
string filepath = "..\\Debug\\Jsonfiles\\示例文件.json";
using (FileStream fs = new FileStream(filepath, FileMode.OpenOrCreate, System.IO.FileAccess.ReadWrite, FileShare.ReadWrite))
{
using (StreamReader sr = new StreamReader(fs, Encoding.UTF8))
{
json = sr.ReadToEnd();
}
}
BindTreeView(json);
}
public void BindTreeView(string strJson)
{
treeView.Nodes.Clear();//清空Node
if (IsJOjbect(strJson))
{
JObject jo = (JObject)JsonConvert.DeserializeObject(strJson);
foreach (var joitem in jo)
{
TreeNode jotree;
if (joitem.Value.GetType() == typeof(JObject))
{
jotree = new TreeNode(joitem.Key);
AddTreeChildNode(ref jotree, joitem.Value.ToString());
treeView.Nodes.Add(jotree);
}
else if (joitem.Value.GetType() == typeof(JArray))
{
if (IsVarArray(joitem.Value.ToString()))
{
jotree = new TreeNode(joitem.Key);
AddTreeChildNode(ref jotree, joitem.Value.ToString());
treeView.Nodes.Add(jotree);
}
else
{
jotree = new TreeNode(joitem.Key + ":" + joitem.Value.ToString());
treeView.Nodes.Add(jotree);
}
}
else if (joitem.Value.GetType() == typeof(JValue))
{
jotree = new TreeNode(joitem.Key + ":" + joitem.Value.ToString());
treeView.Nodes.Add(jotree);
}
else
{
jotree = new TreeNode(joitem.Key + ":" + joitem.Value.ToString());
treeView.Nodes.Add(jotree);
}
}
}
if (IsJArray(strJson))
{
JArray ja = (JArray)JsonConvert.DeserializeObject(strJson);
foreach (JObject items in ja)
{
TreeNode tree = new TreeNode();
foreach (var jaitem in items)
{
TreeNode jatree;
if (jaitem.Value.GetType() == typeof(JObject))
{
jatree = new TreeNode(jaitem.Key);
AddTreeChildNode(ref jatree, jaitem.Value.ToString());
tree.Nodes.Add(jatree);
}
else if (jaitem.Value.GetType() == typeof(JArray))
{
if (IsVarArray(jaitem.Value.ToString()))
{
jatree = new TreeNode(jaitem.Key);
AddTreeChildNode(ref jatree, jaitem.Value.ToString());
tree.Nodes.Add(jatree);
}
else
{
jatree = new TreeNode(jaitem.Key + ":" + jaitem.Value.ToString());
tree.Nodes.Add(jatree);
}
}
else if (jaitem.Value.GetType() == typeof(JValue))
{
jatree = new TreeNode(jaitem.Key + ":" + jaitem.Value.ToString());
tree.Nodes.Add(jatree);
}
else
{
jatree = new TreeNode(jaitem.Key + ":" + jaitem.Value.ToString());
tree.Nodes.Add(jatree);
}
}
treeView.Nodes.Add(tree);
}
}
treeView.ExpandAll();
}
public void AddTreeChildNode(ref TreeNode parantNode, string value)
{
if (IsJOjbect(value))
{
JObject jo = (JObject)JsonConvert.DeserializeObject(value);
foreach (var joitem in jo)
{
TreeNode jotree;
if (joitem.Value.GetType() == typeof(JObject))
{
jotree = new TreeNode(joitem.Key);
AddTreeChildNode(ref jotree, joitem.Value.ToString());
parantNode.Nodes.Add(jotree);
}
else if (joitem.Value.GetType() == typeof(JArray))
{
if (IsVarArray(joitem.Value.ToString()))
{
jotree = new TreeNode(joitem.Key);
AddTreeChildNode(ref jotree, joitem.Value.ToString());
parantNode.Nodes.Add(jotree);
}
else
{
jotree = new TreeNode(joitem.Key + ":" + joitem.Value.ToString());
parantNode.Nodes.Add(jotree);
}
}
else
{
jotree = new TreeNode(joitem.Key + ":" + joitem.Value.ToString());
parantNode.Nodes.Add(jotree);
}
}
}
if (IsJArray(value))
{
JArray ja = (JArray)JsonConvert.DeserializeObject(value);
foreach (JObject item in ja)
{
TreeNode tree = new TreeNode();
parantNode.Nodes.Add(tree);
foreach (var jaitem in item)
{
TreeNode jatree;
if (jaitem.Value.GetType() == typeof(JObject))
{
jatree = new TreeNode(jaitem.Key);
AddTreeChildNode(ref jatree, jaitem.Value.ToString());
tree.Nodes.Add(jatree);
}
else if (jaitem.Value.GetType() == typeof(JArray))
{
jatree = new TreeNode(jaitem.Key);
AddTreeChildNode(ref jatree, jaitem.Value.ToString());
tree.Nodes.Add(jatree);
}
else
{
jatree = new TreeNode(jaitem.Key + ":" + jaitem.Value.ToString());
tree.Nodes.Add(jatree);
}
}
}
}
}
public bool IsJOjbect(string value)
{
try
{
JObject ja = JObject.Parse(value);
return true;
}
catch (Exception )
{
return false;
}
}
public bool IsJArray(string value)
{
try
{
JArray ja = JArray.Parse(value);
return true;
}
catch (Exception )
{
return false;
}
}
public bool IsVarArray(string value)
{
try
{
bool a = true;
JArray ja = JArray.Parse(value);
foreach (var item in ja)
{
if (item.GetType() != typeof(JObject))
{
a = false;
break;
}
}
return a;
}
catch (Exception)
{
return false;
}
}