【问题标题】:C# endpoint giving back a nested list of directories and files as JSONC# 端点以 JSON 形式返回目录和文件的嵌套列表
【发布时间】:2019-11-26 17:31:36
【问题描述】:

我的目标是实现一个端点,它返回从某个根目录开始的所有文件和目录的嵌套列表,例如C:\Temp。我写了以下代码:

namespace API.Controllers
{
    public class UploadController : BaseController
    {
        [Route("api/Uploaded", Order = -1)]
        [ResponseType(typeof(IEnumerable<string[]>))] // <- this has to be adjusted, I guess.
        public IHttpActionResult AutoUpload()
        {
            string[] entries = Directory.GetFileSystemEntries("C:\Temp", "*", SearchOption.AllDirectories);
            // <-- Here should come some conversion to a nested JSON.
            return Ok(entries); 
        }
    }
}

当我查询端点时,例如与curl -X POST --header 'Accept: application/json' 'http://localhost:63291/api/Uploaded' 的响应是什么

[
 "C:\\\\Temp\\file1",
 "C:\\\\Temp\\dir1\\file2",
 "C:\\\\Temp\\dir1\\file3"
]

我宁愿拥有类似以下的东西

[
    { "~":
        [ "file1" ]
    },
    {
        "~/dir1":
                [
                     "file2" ,
                     "file3" 
               ]
    }
]

我确信将我的列表转换为嵌套的 JSON 不会那么复杂,但不知何故我无法做到。我担心,我错过了适当的搜索词。请帮忙!

【问题讨论】:

  • 好吧,Directory.GetFileSystemEntries 将返回与您的搜索模式匹配的所有项目的数组。要返回嵌套,您需要迭代路径以正确创建结构。您可能会创建一个包含父目录和子目录的对象,以在您最终展平的基础上进行分组,但您需要遍历和解析自己以创建嵌套结构。

标签: c# asp.net rest endpoint


【解决方案1】:

首先属性 [ResponseType] 不会影响您的响应,它只是元数据,例如swagger 用来记录您的端点。

Directory.GetFileSystemEntries 正如 Greg 所说,返回表示路径的集合(数组)od 字符串。您需要将结果解析为您希望我看到的格式,类似于File 类和包含FileDirectory,但更好的方法是使用像FileInfo 这样的内置类型。

DirectoryInfo 类提供了一些您可以使用的有用方法:

获取目录下的所有文件:https://docs.microsoft.com/en-us/dotnet/api/system.io.directoryinfo.getfiles?view=netframework-4.8

获取目录下的所有目录: https://docs.microsoft.com/en-us/dotnet/api/system.io.directoryinfo.getdirectories?view=netframework-4.8

或者同时获得: https://docs.microsoft.com/en-us/dotnet/api/system.io.directoryinfo.getfilesysteminfos?view=netframework-4.8

了解该方法返回的数据类型并充分利用它;)

我认为你需要做一些递归来遍历所有子目录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多