Я создаю древовидное представление, используя кендо в MVC, вход, который у меня есть, - это Список таких путей:
List<string> FileList =
"Root/Folder1/SubFolder1/excel.xls",
"Root/Folder1/SubFolder1/word.doc",
"Root/Folder1/SubFolder1/access.xls",
"Root/Folder1/SubFolder1/subfolder2"
Мне нужно создать иерархический json объект с Следующая модель:
public class Item
{
public int id { get; set; }
public string Name { get; set; }
public int ParentId { get; set; }
public string Path { get; set; }
public List<Item> Items { get; set; }
}
Мне нужно создать контроллер, который с помощью рекурсивного метода может создавать и возвращать json следующим образом: Я пытался реализовать рекурсию, но результат неверен. Не могли бы вы мне помочь?
data = [
{
id: 1,
Title:Root
path: "Root/"
children: [
{
Id:2
Title: "Folder1",
ParentId:1
path: "Root/Folder1/"
children: [
{
Id:3
Title: "SubFolder1",
ParentId:2
path: "Root/Folder1/SubFolder1/"
children: [
{
Id:4
Title: "excel.xls",
ParentId:3,
path: "Root/Folder1/SubFolder1/excel.xls"
},
{
Id:5
Title: "word.doc",
ParentId:3
path: "Root/Folder1/SubFolder1/excel.xls"
},
{
Id:6
Title: "access.xls",
ParentId:3
path: "Root/Folder1/SubFolder1/excel.xls"
},
{
Id:6
Title: "access.xls",
ParentId:3
path: "Root/Folder1/SubFolder1/subfolder2"
}
]
}
]
}
]
}
];
Это мой код:
public JsonResult GetCultureTemplateFiles(string culture)
{
//Connect to Storage Account
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.ConnectionStrings["**********"].ConnectionString);
// Create the blob client.
var blobClient = storageAccount.CreateCloudBlobClient();
//Find Blob Container
var TemplateContainer = blobClient.GetContainerReference("*************");
// Get FileList from Container filtered by culture
List<IListBlobItem> FileList = TemplateContainer.ListBlobs(culture + "/", true).ToList();
List<KendoItem> jsonTreeObj = new List<KendoItem>();
var i = 1;
foreach (var file in FileList)
{
//remove the language component from the path
var operatingFile = ((CloudBlockBlob)file).Name.Substring(((CloudBlockBlob)file).Name.IndexOf('/') + 1);
var dir = operatingFile;
//split the path
var dirList = dir.Split('/').ToList();
//Add Directories for given path to the collection
KendoItem node = new KendoItem();
foreach (var ele in dirList)
{
var index = dirList.IndexOf(ele);
if (index == 0)
{
if (jsonTreeObj.FirstOrDefault(x => x.Text == ele) == null)
{
node.Id = i;
node.ParentId = null;
node.Text = ele;
jsonTreeObj.Add(node);
}
}
else
{
node.Items = new List<KendoItem>();
node.Items = (WalkStringPath(ele, i, node));
}
i++;
}
}
return Json(jsonTreeObj);
}
public List<KendoItem> WalkStringPath(string ele, int i, KendoItem lastNode)
{
var parentId = lastNode.Id;
if (parentId >= i)
{
return null;
}
KendoItem node = new KendoItem();
node.Id = i;
node.ParentId = parentId;
node.Text = ele;
lastNode.Items.Add(node);
return lastNode.Items;
}