首页 > 解决方案 > C# - 从 Dictionary 创建 JSON 对象数组

问题描述

我确信有一个简单的解决方案,我只是还没有弄清楚。

我需要返回一个对象数组JSON(我完全不熟悉)。结构应如下所示:

{"files": [
  {
    "picture1.jpg": true
  },
  {
    "picture2.jpg": true
  }
]}

我以为我可以通过使用Dictionary但这似乎也没有按照我想要的方式工作。以下是我到目前为止所拥有的以及输出是什么。任何指导将不胜感激!

这就是我所拥有的C#

public async Task<JsonResult> DeleteImages(List<string> ids)
{
    var files = new Dictionary<string, bool>();

    foreach (var id in ids)
    {
        var file = await _fileService.GetByIdAsync(id);
        if (await AzureStorage.DeleteFile(file))
        {
            files.Add(file.Name, true)
        }
    }

    return Json(JsonConvert.SerializeObject(files));
}

问题是这会返回以下内容:

{
    "picture1.jpg": true,
    "picture2.jpg": true
}

标签: c#json

解决方案


以下解决方案将提供您正在寻找的内容。真正的关键是创建一个中间对象来保存您正在查找的条目,而不是简单地将文件放在字典中。另一个复杂之处是您实际上是在寻找一个字典列表,其中每个字典都包含一个文件名/已删除条目。

文件收集类:

public class FileCollection
{
    [JsonProperty("files")]
    public List<Dictionary<string, bool>> Files { get; set; }

    public FileCollection()
    {
        Files = new List<Dictionary<string, bool>>();
    }
}

您现有的逻辑,修改为使用新的集合类:

public async Task<JsonResult> DeleteImages(List<string> ids)
{
    var files = new FileCollection();

    foreach (var id in ids)
    {
        var file = await _fileService.GetByIdAsync(id);
        if (await AzureStorage.DeleteFile(file))
        {
            files.Files.Add(new Dictionary<string, bool> { { file.Name, true } });
        }
    }

    return Json(JsonConvert.SerializeObject(files));
}

推荐阅读