Active Directory OU Дерево для jqTree

Мне нужно создать действительную структуру JSON JQTree из подразделений Active Directory. Я тестирую с помощью рекурсивного метода (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);
        }
    }
}

1 ответ

Вы должны предоставить более подробную информацию о том, что не так с вашим кодом.

Я попробую:-)

Вы можете попытаться изменить свой код, как показано ниже. Не оптимально (было бы лучше использовать запуск с использованием перед разделением, больше string.Format, тестирование потомков с помощью запуска с помощью перед рекурсивным вызовом метода), но я думаю, это должно сработать.

Возможно, вам нужно будет загрузить потомков из источника 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;
}
Другие вопросы по тегам