С помощью следующего кода:Создания из дерева файлов каталога с Json.NET LINQ
static void Main(string[] args)
{
JObject fileSystemTree = CreateFileSystemJsonTree("C:/DirectoryTree");
Console.WriteLine(fileSystemTree);
Console.WriteLine("------");
//
// Write it out to a file
//
System.IO.File.WriteAllText(@"C:\jsontree.txt", fileSystemTree.ToString());
Console.ReadLine();
}
static JObject joNew = new JObject();
static JObject CreateFileSystemJsonTree(string source)
{
//
// Build a list of all the IPs
//
//Console.WriteLine(source);
using (var poiDbContext = new poiDbEntities())
{
DirectoryInfo di = new DirectoryInfo(source);
{
joNew = new JObject(
new JProperty(di.Name, new JArray(Directory.GetDirectories(source).Select(d => CreateFileSystemJsonTree(d)))),
new JProperty("files", new JArray(di.GetFiles().Select(fi => new JObject(new JProperty(fi.Name, GetText(fi.Name)))))));
}
Console.WriteLine(joNew);
}
return joNew;
}
public static string GetText(string fiName)
{
using (var poiDbContext = new poiDbEntities())
{
string indexNameBody = fiName.Substring(0, fiName.LastIndexOf('.'));
var indexResult = "test"; // dummied up for use by evaluators
return indexResult.Trim();
}
}
Я пытаюсь создать из дерева файлов системного каталога с помощью рекурсии. Я работаю с XML, но предпочитаю дерево JSON. Проблема заключается в том, что появляются файлы txt, а не с родительским [], который представляет собой самую низкую папку, но вместо этого добавляется как JsonProperties с текстовым именем, которое я добавил как «файлы» (чего я не хочу). Кроме того, «файлы» генерируются, даже если нет файлов, например, в пустой папке. Сгенерированный системой фрагмент сопровождается возможным желаемым фрагментом.
"Sports": [
{
"NBA": [],
"files": [] // Undesirable--The folder is empty``
},``
Два сниппеты:
{
"Politics": [
{
"PresCandidates": [
{
"Republican": [], // Notice the files are not in array within the [] of the Republican
"files": [
{
"carson_ben_s.txt": "Ben Carson"
},
{
"trump_donald_j.txt": "Donald Trump"
},
{
"walker_scott_k.txt": "Scott Walker"
}
]
}
]
}
],
"Politics": [ // The desired format
{
"PresCandidates": [
{
"Republican": [
{
"carson_ben_s.txt": "Ben Carson"
},
{
"trump_donald_j.txt": "Donald Trump"
},
{
"walker_scott_k.txt": "Scott Walker"
}
],
{
Был ли это ответом на меня? Если это так, вероятно, должен был быть [комментарий] (http://meta.stackexchange.com/questions/19756/how-do-comments-work) - возможно, по вашему собственному вопросу с вставленным «@dbc». – dbc
JSON, который вы предлагаете, недействителен в соответствии со стандартом [http://json.org/). JSON имеет две конструкции контейнера: массивы, которые выглядят как '[value1, value2, ..., valueN]' и объекты, которые выглядят как '{" name1 ": value1," name2 ": value2, ...," nameN ": valueN} '. Ваш JSON имеет квадратные скобки, ограничивающие набор пар имя/значение, что недопустимо. – dbc
Спасибо за ввод. Я использую решение, которое вы предоставили. Что касается неправильного использования «комментариев», я постараюсь быть более информированным. – user3594395