C#-从字典创建对象的JSON数组

时间:2018-08-20 18:50:02

标签: c# 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
}

1 个答案:

答案 0 :(得分:1)

以下解决方案将提供您所需要的确切信息。真正的关键是创建一个中间对象来保存您要查找的条目,而不是简单地将文件放在Dictionary中。另一个麻烦之处在于,您实际上是在寻找字典列表,其中每个字典都包含一个文件名/删除的条目。

文件收集类:

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));
}