C#AspNetCore.Mvc将json绑定到类

时间:2017-04-12 19:41:20

标签: c# asp.net json asp.net-mvc asp.net-core

我正在为我的反应项目做asp.net核心web api。而且我遇到了解析json POST请求的问题。  我的行动看起来像这样

     [HttpPost]
    public IActionResult Create([FromBody] RootObject request)
    {

            System.Diagnostics.Debug.WriteLine(request);
        return null;
    }

我正在传递这个张贴这个json

{
"survey": {
    "questions": [{
        "check": [null]
    }],
        "title": "dsfdf",
        "date": "dfdsfs",
        "notify": true
    }
 }

我的RootObject类看起来像这样

 public class Question1
{
    public List<string> check { get; set; }
    public string title { get; set; }
    public string description { get; set; }
}

public class RootObject
{
    public List<Question1> questions { get; set; }
    public string title { get; set; }
}

所以问题是请求总是为空。任何想法,如何解决它?

3 个答案:

答案 0 :(得分:0)

JSON错了。 应该是

{
"questions": [{
    "check": [null]
}],
    "title": "dsfdf",
    "date": "dfdsfs",
    "notify": true
}

答案 1 :(得分:0)

您的JSON表示应该模仿您的C#对象表示(因为您正在使用模型绑定)

还要确保内容类型是正确的(application / json),以便使用正确的序列化程序。

因此:

public class RootObject {
    [JsonProperty("questions")]
    public List<Question> Questions {get;set;}
    [JsonProperty("title")]
    public string Title { get; set; }
    [JsonProperty("description")]
    public string Description { get; set; }
}
public class Question
{
    [JsonProperty("check")]
    public List<string> Check { get; set; }
}

请参阅https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding

答案 2 :(得分:0)

请参阅此示例。 https://code.msdn.microsoft.com/How-to-post-complex-JSON-d15bb765

这与您的方案相同。

模型

public class ItemGroup 
{ 
    public string Name { get; set; } 

    public IList<GroupItem> Items { get; set; } 
} 

public class GroupItem 
{ 
    public int Id { get; set; } 

    public string Name { get; set; } 
} 

前端

    var sendJsonData = { 
        Name: "Group1", 
        Items: [ 
            { 
                Id: 1, 
                Name: "Item1" 
            }, 
            { 
                Id: 2, 
                Name: "Item2" 
            }, 
            { 
                Id: 3, 
                Name: "Item3" 
            } 
        ] 
    }; 

    $.ajax({ 
        url: "/Home/PostJson", 
        type: "POST", 
        contentType: "application/json", 
        data: JSON.stringify(sendJsonData), 
        success: function (data) { 

        } 
    }); 

控制器

public class HomeController : Controller 
{ 
    private static List<ItemGroup> _datas = new List<ItemGroup>(); 

    public IActionResult Index() 
    { 
        return View(_datas); 
    } 

    [HttpPost] 
    public JsonResult PostJson([FromBody] ItemGroup data) 
    { 
        if (data != null) 
        { 
            _datas.Add(data); 
        } 

        return Json(new 
        { 
            state = 0, 
            msg = string.Empty 
        }); 
    } 
}