您会惊讶于这是如此简单。只需设置模型对象,使它们具有正确的属性即可。对于您尝试实现的 JSON 字符串,您不需要视图模型,因为您似乎希望顶级对象包含员工的属性。而如果您使用视图模型对象,那么顶级对象将是视图模型对象,而员工将是该对象的属性。
相反,我认为您希望顶级对象是一个雇员,其属性是子对象(子对象)的列表。子对象还有一个称为“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;{
}
现在你的行动方法。您知道您可以只返回 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);
}
这个 JSON 看起来像:
{ "EmployeeID":"123", "FirstName":"John", "LastName":"Doe", "Children":[
{ "ChildID":"someid", "FirstName":"Joe", "LastName":"Smith", Children [] },
{ etc... }
] }
如果您对 JSON 不太熟悉,那么您应该知道变量和名称两边的引号可确保不会出现任何误解。 MVC 为您做到了这一点,而且做得很好。它将把员工的列表属性转换为 JSON 数组,而无需您做任何工作,并且它将格式化 JSON 整齐且可读。
现在,使用 MVC 3,您还可以模型绑定到 JSON。如果您发出包含 json 对象的请求,MVC 3 会自动将其属性绑定到员工对象。因此,如果您发布了我上面列出的相同 JSON 字符串,您的操作方法可能如下所示:
public ActionResult SampleMethod(Employee emp)
{
//emp would be the same object you sent as JSON earlier and are now sending back :D
}
NOTE:你可能会考虑改变Employee
to Person
,并给它一个名为Children
类型的List<Person>
。这样你就可以结合Employee
and Child
类合而为一。但自然我看不到你的所有代码,所以也许你确实有足够的独特属性来值得这两个类。