您的位置:首页 > 产品设计 > UI/UE

将微信获取的部门JSON字符串转换成EASY UI Tree能够绑定的JSON(JSONPath的使用)

2015-09-10 16:33 519 查看


需求:将红框中的JSON字符串转换成红框下面的JSON字符串,以供easy ui tree控件使用

思路:

1、创建一个实体,组织架构实体类,包括两个属性及一个List

2、遍历每个JSON数组,如果是顶级节点,则直接插入

3、如果不是顶级,则查找低级,将自己添加至list中

OrganizationNode.cs 具体代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace OAuth2
{
public class OrganizationNode
{
public OrganizationNode()
{
children = new List<OrganizationNode>();
}

public string id { get; set; }
public string name { get; set; }
public List<OrganizationNode> children { get; set; }
}
}


  

遍历方法:

/// <summary>
/// 获取微信用户
/// </summary>
/// <returns></returns>
public static string GetWxDepts()
{
var token = GetAccessToken();
var result = "";
string corpId = WxCorpId;
StringBuilder sbJson = new StringBuilder();
Dictionary<string, object> dict = HttpGet(string.Format("https://qyapi.weixin.qq.com/cgi-bin/department/list?access_token={0}&id={1}", token, corpId));
object deptList;
if (dict.TryGetValue("department", out deptList))
{
JArray deptArray = (JArray)deptList;
JObject nodeToken = null;
foreach(JToken dep in deptArray)
{
string parentid = dep["parentid"].ToString();

//TODO:枚举数组,构建OrganizationNode总包对象(Json.Net)

//TODO:加载行级数据生成新的OrganizationNode对象
OrganizationNode newNode = dep.ToObject<OrganizationNode>();
if (parentid == "0")
nodeToken = JObject.FromObject(newNode);
else
{
if (nodeToken == null)
throw new Exception("主节点未初始化,检查接口API信息");
//TODO:依据parentid,将新Node对象插入至对于的节点位置
JToken targetNode = null;
if (parentid == "1")
targetNode = nodeToken;
else
targetNode = nodeToken.SelectToken(string.Format("$..children[?(@.id=='{0}')]", parentid), false);
if (targetNode == null)
throw new Exception(string.Format("对应id {0} 节点未找到", parentid));
//JToken lastChild = targetNode.LastOrDefault();

JArray children = (JArray)targetNode.SelectToken(".children");
children.Add(JToken.FromObject(newNode));

//targetNode.Parent = org;

//targetNode.Last.AddAfterSelf(newNode);
}
}
//result = OAuth2.JsonHelper.JsonSerialize(deptList);
result = "[" + nodeToken.ToString(Newtonsoft.Json.Formatting.None) + "]";
}
return result;
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: