如何接受更多层的JSON

时间:2019-07-05 08:08:31

标签: entity-framework-core

我尝试使用模型接受此JSON,但似乎无法弄清楚我将如何接受双层JSON。

我一直在获取无效数据,所以我的模型应该如何显示?

JSON

{
    "MAC": "04916206f005",
    "DateTime": "2015-01-01 23:59:50",
    "Data": [{
        "Flow": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    }]
}

型号

{
    public class FlowDTO
    {

        [Required]
        public string MacAdr { get; set; }
        public DateTime DateTime { get; set; }
        public Array[] Data { get; set; }

    }

控制器

[HttpPost]
        public async Task<IActionResult> FlowMessageFromGateway([FromBody] FlowDTO flowDTO)
        {
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }

            return Ok(flowDTO);
        }
    }

我得到错误

{
  "Data[0].Flow": [
    "The input was not valid."
  ]
}

1 个答案:

答案 0 :(得分:1)

问题在于您如何发送数据。

由于您将其命名为“ Flow”,因此在反序列化时,它期望Data具有名为Flow的属性。

您应该可以通过邮递员发送以下内容来使其工作:

{
    "MAC": "04916206f005",
    "DateTime": "2015-01-01 23:59:50",
    "Data": [0,0,0,0,0,0,0,0,0]
}

修改

如果您希望此数据有效:

{
    "MAC": "04916206f005",
    "DateTime": "2015-01-01 23:59:50",
    "Data": [{
        "Flow": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
    }]
}

然后,您需要执行以下操作:

1)持有流的对象

public class Data
{
    public List<int> Flow {get; set;}
}

2)更新原始模型以使用数据类

public class FlowDTO
{

    [Required]
    public string MacAdr { get; set; }
    public DateTime DateTime { get; set; }
    public List<Data> Data { get; set; }

}