C# 端点以 JSON 的形式返回目录和文件的嵌套列表
C# endpoint giving back a nested list of directories and files as JSON
我的目标是实现一个端点,它返回从某个根目录开始的所有文件和目录的嵌套列表,例如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 不会这么复杂,但我不知何故无法做到这一点。恐怕我错过了合适的搜索词。请帮忙!
首先,属性 [ResponseType]
不会影响您的响应,它只是元数据,例如 swagger 用来记录您的端点。
Directory.GetFileSystemEntries
正如 Greg 所说 returns 表示路径的集合(数组)od 字符串。您需要将结果解析为您想要的格式,我看到它类似于 File
class 和 Directory
包含 File
但更好的方法是使用 build in types like FileInfo
.
DirectoryInfo
class 提供了一些您可以使用的有用方法:
获取目录中的所有文件: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
阅读该方法返回的数据类型并充分利用它 ;)
我想你需要做一些递归来遍历所有子目录。
我的目标是实现一个端点,它返回从某个根目录开始的所有文件和目录的嵌套列表,例如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 不会这么复杂,但我不知何故无法做到这一点。恐怕我错过了合适的搜索词。请帮忙!
首先,属性 [ResponseType]
不会影响您的响应,它只是元数据,例如 swagger 用来记录您的端点。
Directory.GetFileSystemEntries
正如 Greg 所说 returns 表示路径的集合(数组)od 字符串。您需要将结果解析为您想要的格式,我看到它类似于 File
class 和 Directory
包含 File
但更好的方法是使用 build in types like FileInfo
.
DirectoryInfo
class 提供了一些您可以使用的有用方法:
获取目录中的所有文件: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
阅读该方法返回的数据类型并充分利用它 ;)
我想你需要做一些递归来遍历所有子目录。