如何从Action Method with Array属性返回Json?

ste*_*776 4 c# asp.net asp.net-mvc asp.net-mvc-3

我试图从动作方法返回一些数据作为json.

我有一个员工对象,如下所示:

public class Employee
{
     public int EmployeeID {get; set;}
     public string FirstName {get; set;}
     public string LastName {get; set;}
     //Other irrelevant properties
}
Run Code Online (Sandbox Code Playgroud)

然后我有一个视图模型如下

public Class EmployeeViewModel
{

    public Employee Supervisor{get; set;}
    public List<EmployeeViewModel> Employees

} 
Run Code Online (Sandbox Code Playgroud)

我需要返回一个看起来完全像这样的json对象:

{id: 1, name: John, children: [
    {id: 1, name: Joe, children: []},
    {id: 1, name: Rob, children: []}
]}
Run Code Online (Sandbox Code Playgroud)

现在我只需要进入上面的第二级,返回主管和他们的工作人员.

我将如何在我的动作方法中返回这个(我已经将viewModel对象保持水分,我只需要将其作为json返回).到目前为止我的问题是该children物业没有填充.

Che*_*hev 9

你会惊讶于它是多么简单.只需设置模型对象,使它们具有正确的属性.使用您尝试实现的JSON字符串,您不需要视图模型,因为您似乎希望顶级对象包含employee的属性.而如果使用viewmodel对象,则顶级对象将是视图模型对象,而employee将是该对象的属性.

相反,我认为您希望顶级对象是具有属性列表(子对象)的员工.子对象也有一个名为children的属性.哪个可以递归填充.构建对象是您的责任,但我确实提供了一些伪代码伪代码来帮助您入门.

public Class Employee
{
     public int EmployeeID {get; set;}
     public string FirstName {get; set;}
     public string LastName {get; set;}
     public List<Child> Children {get; set;}
}

public Class Child
{
    public int ChildID {get; set;}
    public string FirstName {get; set;}
    public string LastName {get; set;}
    public List<Child> Children {get; set;{
}
Run Code Online (Sandbox Code Playgroud)

现在你的行动方法.你知道你可以退回JsonResult吗?做这个:

public JsonResult GetJSON()
{
    //Build employee object and add children to list. Something like the following pseudo-code:
    List<Child> childrenList = new List<Child>
    {
        new Child
        {
            ChildID = //some id,
            FirstName = "Joe",
            LastName = "Smith"
            // Add children to list.
        },
        // Add more children to list.
    }
    Employee emp = new Employee
    {
        EmployeeID = 123,
        FirstName = "John",
        LastName = "Doe",
        Children = childrenList
    };
    Return Json(emp);
}
Run Code Online (Sandbox Code Playgroud)

这个JSON看起来像:

{ "EmployeeID":"123", "FirstName":"John", "LastName":"Doe", "Children":[
    { "ChildID":"someid", "FirstName":"Joe", "LastName":"Smith", Children [] },
    { etc... }
] }
Run Code Online (Sandbox Code Playgroud)

如果您不熟悉JSON,那么您应该知道变量和名称周围的引号确保没有任何错误解释.MVC为你做到了,而且非常好.它会将employee的list属性转换为JSON数组,而不需要您做任何工作,它将整齐且可读地格式化JSON.

现在使用MVC 3,您也可以模拟绑定到JSON.如果您使用包含的json对象发出请求,MVC 3将自动将其属性绑定到employee对象.因此,如果您发布了我上面列出的相同JSON字符串,那么您的操作方法可能如下所示:

public ActionResult SampleMethod(Employee emp)
{
    //emp would be the same object you sent as JSON earlier and are now sending back :D
}
Run Code Online (Sandbox Code Playgroud)

注意:您可以考虑更改EmployeePerson,并为其指定一个名为Childrentype 的属性List<Person>.这样你就可以将EmployeeChild类合并为一个.但自然我看不到你的所有代码,所以也许你有足够的独特属性值得这两个类.