gpt4 book ai didi

c# - 如何从具有 Array 属性的 Action Method 返回 Json?

转载 作者:太空狗 更新时间:2023-10-30 00:27:45 24 4
gpt4 key购买 nike

我正在尝试从操作方法中以 json 形式返回一些数据。

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

public class Employee
{
public int EmployeeID {get; set;}
public string FirstName {get; set;}
public string LastName {get; set;}
//Other irrelevant properties
}

然后我有一个 View 模型如下

public Class EmployeeViewModel
{

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

}

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

{id: 1, name: John, children: [
{id: 1, name: Joe, children: []},
{id: 1, name: Rob, children: []}
]}

目前我只需要进入上面的第二层,返回主管和他们下面的工作人员。

我将如何在我的操作方法中返回它(我已经将 viewModel 对象水化,我只需要将它作为 json 返回)。到目前为止,我的问题是 children 属性没有被填充。

最佳答案

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

相反,我认为您希望顶级对象是一名雇员,该雇员的属性是子项(子对象)的列表。子对象也有一个名为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 为您做这件事,而且做得很好。它会将 employee 的列表属性转换为 JSON 数组,而无需您进行任何操作,并且会将 JSON 格式化为整洁且可读的格式。

现在使用 MVC 3,您还可以模型绑定(bind)到 JSON。如果您发出包含 json 对象的请求,MVC 3 将自动将其属性绑定(bind)到员工对象。因此,如果您发布了我上面列出的相同 JSON 字符串,您的操作方法可能如下所示:

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

注意:您可以考虑更改 EmployeePerson ,并给它一个名为 Children 的属性类型 List<Person> .这样你就可以结合 EmployeeChild类(class)合二为一。但是我自然无法看到您的所有代码,所以也许您确实有足够的独特属性值得这两个类。

关于c# - 如何从具有 Array 属性的 Action Method 返回 Json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5300820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com