繁体   English   中英

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

[英]C# - Create JSON array of objects from Dictionary

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

我需要以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
}

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

文件收集类:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM