通过body属性递归绑定到对象

时间:2017-09-05 05:46:59

标签: c# asp.net .net asp.net-web-api asp.net-core

是否可以绑定发布请求,如下所示:

{
    "name": "Tree Node 1",
    "children": 
    {
        "name": "Tree Node 2",
        "children": 
        {
            "name": "Tree Node 3",
            "children": [],
            "data": 
            {

            }
        }
    }
}

使用[From Body]属性或仅适用于没有“继承”的简单请求?

2 个答案:

答案 0 :(得分:1)

那么,首先是children一个数组或对象?你使用两者。

我说它可能应该是一个数组,所以类似于:

{
    "name": "Tree Node 1",
    "children": 
    [{
        "name": "Tree Node 2",
        "children": 
        [{
            "name": "Tree Node 3",
            "children": [],
            "data": 
            {
            }
        }]
    }]
}

然后你只需创建一个引用自己的模型:

public class TreeNode
{
    public string Name { get; set; }
    public ICollection<TreeNode> Children { get; set; }
    public IDictionary<string, string> Data { get; set; }
}

您没有在data对象中放置任何内容,因此无法猜测其结构是什么。在这里,我使用了Dictionary<string, string>来使它可以包含任何键值对。

现在让你的控制器动作如下:

[HttpPost("test")]
public IActionResult Test([FromBody] TreeNode model)
{
    return Ok();
}

答案 1 :(得分:1)

你需要这样的东西:

public class MyClass
{
    public string Name{get;set;}
    public IEnumerable<MyClass> Children{get;set;}
    public Data Data {get;set;}
}
public class Data
{
    //properties of data
}