我需要从Active Directory OU创建有效的jqTree JSON结构。我正在测试一个递归方法(InfoNode),但我无法得到它。
生成的json进入字符串json。要处理的第一个节点是具有默认域根的DirectoryEntry父节点。获取递归方法(InfoNode) 当前子节点,按“OU”过滤并创建JSON属性“label”和“path”。在检查此节点是否有更多子节点写入当前JSON项的末尾之前。最后,如果有更多子项,请再次运行方法(InfoNode):
public static DirectoryEntry root = new DirectoryEntry("LDAP://RootDSE");
public string dom = (string)root.Properties["defaultNamingContext"].Value;
public string json = "";
public Form1()
{
InitializeComponent();
DirectoryEntry parent = new DirectoryEntry("LDAP://" + dom);
InfoNode(parent);
System.IO.File.WriteAllText(@"json.txt", json);
}
void InfoNode(DirectoryEntry node)
{
string[] arr = node.Name.Split('=');
if (arr[0] == "OU")
{
json += "'children':[{'label':'" + arr[1] + "','path':'" + node.Path + "'";
if (nodo.Children == null)
{
json += "}]";
}
else
{
json += ",";
}
}
if (node.Children != null)
{
foreach (DirectoryEntry child in node.Children)
{
InfoNode(child);
}
}
}
答案 0 :(得分:0)
您应该提供有关代码失败的详细信息。
我会试一试: - )
您可以尝试修改代码,如下所示。 不是最优的(在分割之前使用startswith,更多string.Format,在递归调用方法之前测试带有startswith的子项会更好),但我想它应该可以工作。
当您在树中前进时,可能需要从ldap源加载子项。
public string json = "";
public Form1()
{
InitializeComponent();
DirectoryEntry parent = new DirectoryEntry("LDAP://" + dom);
json = InfoNode(parent);
System.IO.File.WriteAllText(@"json.txt", json);
}
public string InfoNode(DirectoryEntry node)
{
string[] arr = node.Name.Split('=');
var result = string.Empty;
if (arr[0].Equals("ou",StringComparison.InvariantCultureIgnoreCase))
{
result = "'{'label':'" + arr[1] + "','path':'" + node.Path + "'";
if (node.Children.Cast<DirectoryEntry>().Any())
{
result += String.Format(", children:[{0}]",
String.Join(",\n ",
node.Children.Cast<DirectoryEntry>()
.Select(InfoNode).Where(s=>!string.IsNullOrEmpty(s))
.ToArray()));
}
result += "}";
}
return result;
}