首页 > 解决方案 > 如何在 .netcore 1.1 中循环使用动态类型的 Json?

问题描述

我已经通过 Postman 传递了 Json 对象。而且我不知道如何使用 .NetCore 1.1 Web 服务循环它。

Postman 传递的 Json 对象:

{
 [
  {"id":"1","name":"Peter"}
  ,
  {"id":"2","name":"Mary"}
 ]
}

.net core 1.1 编码:

[HttpPut]
[Route("all")]
public IActionResult UpdateName([FromBody] dynamic JSON){
  var RootObjects = JsonConvert.DeserializeObject<List<RootObject>>(JSON);
  foreach (var x in RootObjects){
   // do something here...
  }
}

根对象:

private class RootObject
{
    public string id { get; set; }
    public string name { get; set; }
}

我在下面得到错误:

System.ArgumentNullException: 值不能为空。\r\n参数名称: 值\r\n 在 Newtonsoft.Json.JsonConvert.DeserializeObject(字符串值,类型类型,JsonSerializerSettings 设置)\r\n 在 Newtonsoft.Json.JsonConvert.DeserializeObject [T](字符串值,JsonSerializerSettings 设置)\r\n 在 CallSite.Target(Closure , CallSite , Type , Object )\r\n

标签: c#jsonasp.net-coreasp.net-core-webapijson-deserialization

解决方案


也许您的 json 无效。将您的 json 字符串更改为:

 [
  {"id":"1","name":"Peter"},
  {"id":"2","name":"Mary"}
 ]

并将您的控制器操作更改为:

   [HttpPut]
    public IActionResult Test([FromBody] List<RootObject> list)
    {
        foreach (var item in list)
        {
            Console.WriteLine(item.name);
        }

        return Json("ok");
    }

而且 RootObject 类也需要公开:

     public class RootObject
     {
       public string id { get; set; }
       public string name { get; set; }
     }

在 Content-Type:application/json 中使用 postman put 字符串。我看到了正确的结果。


推荐阅读