如何处理 IFormCollection 中的数组键

How to process array key in IFormCollection

我有一个接收 IFormCollection 类型对象的方法,因为我需要处理文件。

    [HttpPost]
    [AllowAnonymous]
    [Route("StoreData")]
    public async Task<IActionResult> StoreDataX(IFormCollection obj)
    {
      var item = FormCollectionToJson(obj);
      var id = this.Service.SaveDynamicData(item, "");

      return StatusCode(200, JObject.FromObject(new
      {
        message = "Registration included and workflow started."
      }));
    }

我将 IFormCollection 键转换为 JObject

private JObject FormCollectionToJson(IFormCollection obj)
    {
      dynamic json = new JObject();

      if (obj.Keys.Any())
      {
        foreach (string key in obj.Keys)
        {
          var value = obj[key][0];
          json.Add(key, value);
        }
      }
      return json;
    }

但是我收到的是一个数组,却无法进行转换,我该如何处理这种类型的数据?

[邮递员请求]

return 个 FormCollectionToJson

{
  "companies[0]": "1-1"
}

预计return

{
  "companies": [
    "1-1"
  ]
}

我哪里错了?如何处理数组或如何发送?

如果要在 JObject 中存储数组,可以使用 JArray Class 来表示 Json 数组。

请参考以下代码:

    [HttpPost] 
    public async Task<IActionResult> Post(IFormCollection obj)
    {
        var item = FormCollectionToJson(obj);
        return StatusCode(200, JObject.FromObject(new
        {
            message = "Registration included and workflow started."
        }));
    }
    private JObject FormCollectionToJson(IFormCollection obj)
    {
        dynamic json = new JObject();
        if (obj.Keys.Any())
        {
            foreach (string key in obj.Keys)
            {   //check if the value is an array                 
                if (obj[key].Count > 1)
                {
                    JArray array = new JArray();
                    for (int i = 0; i < obj[key].Count; i++)
                    {
                        array.Add(obj[key][i]);
                    }
                    json.Add(key, array);
                }
                else
                {
                   var value = obj[key][0];
                    json.Add(key, value);
                }
            }
        }
        return json;
    }

测试结果如下: