Преобразование структуры каталогов и синтаксический анализ в формат JSON в C#
Я хочу получить структуру каталогов на сервере и проанализировать ее в формате json, чтобы я мог отправить ее плагину jQuery treeview (Dynatree) через ajax. Dynatree принимает данные дерева примерно так:
[
{"title": "Item 1"},
{"title": "Folder 2", "isFolder": true, "key": "folder2",
"children": [
{"title": "Sub-item 2.1"},
{"title": "Sub-item 2.2"}
]
},
{"title": "Folder 3", "isFolder": true, "key": "folder3",
"children": [
{"title": "Sub-item 3.1"},
{"title": "Sub-item 3.2"}
]
},
{"title": "Lazy Folder 4", "isFolder": true, "isLazy": true, "key": "folder4"},
{"title": "Item 5"}
]
В этом вопросе @Timothy Shields показал способ получить Directory из класса DirectryInfo и проанализировать структуру в формате Json следующим образом:
JToken GetDirectory(DirectoryInfo directory)
{
return JToken.FromObject(new
{
directory = directory.EnumerateDirectories()
.ToDictionary(x => x.Name, x => GetDirectory(x)),
file = directory.EnumerateFiles().Select(x => x.Name).ToList()
});
}
но вывод не такой, как выше, и я не знаю, как я могу манипулировать им. Буду признателен, если кто-нибудь расскажет, как я могу произвести вывод выше из структуры каталогов. Благодарю.
Редактировать:
Я отредактировал вопрос. Я думаю, что вопрос теперь ясен.
1 ответ
Попробуйте это вместо этого: вы можете создать класс со свойствами по желанию Dynatree (title, isFolder, ...).
class DynatreeItem
{
public string title { get; set; }
public bool isFolder { get; set; }
public string key { get; set; }
public List<DynatreeItem> children;
public DynatreeItem(FileSystemInfo fsi)
{
title = fsi.Name;
children = new List<DynatreeItem>();
if (fsi.Attributes == FileAttributes.Directory)
{
isFolder = true;
foreach (FileSystemInfo f in (fsi as DirectoryInfo).GetFileSystemInfos())
{
children.Add(new DynatreeItem(f));
}
}
else
{
isFolder = false;
}
key = title.Replace(" ", "").ToLower();
}
public string JsonToDynatree()
{
return JsonConvert.SerializeObject(this, Formatting.Indented);
}
}
Метод "JsonToDynatree" возвращает строку, отформатированную в Json, так как Dynatree ожидает ее. Это пример использования класса DynatreeItem:
DynatreeItem di = new DynatreeItem(new DirectoryInfo(@"....Directory path...."));
string result = "[" + di.JsonToDynatree() + "]";