C# 如何将列表连同硬编码根一起返回到JSON
我不完全确定如何定义这个问题,但基本上我正在开发一个ASP.Net应用程序,其中生成一个名为IndexJson的JsonResult 我的代码如下:C# 如何将列表连同硬编码根一起返回到JSON,c#,asp.net,json,C#,Asp.net,Json,我不完全确定如何定义这个问题,但基本上我正在开发一个ASP.Net应用程序,其中生成一个名为IndexJson的JsonResult 我的代码如下: public JsonResult IndexJson() { var contacts = (from x in db.ContactSet select new { x.AccountId,
public JsonResult IndexJson()
{
var contacts = (from x in db.ContactSet
select new
{
x.AccountId,
x.FirstName,
x.LastName,
x.FullName,
x.JobTitle,
x.ParentCustomerId,
x.EMailAddress1,
x.Telephone1,
x.MobilePhone,
x.Fax,
x.GenderCode,
x.BirthDate
}).ToList();
return Json(contacts, JsonRequestBehavior.AllowGet);
}
这可以很好地返回以下JSON:
[{/*contact info*/}, {/*contact info*/}, {/*contact info*/}, ...]
但现在我想返回以下硬编码的JSON,稍后我将更改这些值:
{
"current": 1,
"rowCount": 10,
"rows": [{/*contact info*/}, {/*contact info*/}, {/*contact info*/}, ...],
"total": 1123
}
如何调整代码以实现这一点?只需将所有内容包装到新的匿名对象中即可
return Json(new { current = 1, rowCount = 10, rows = contacts, total = 1123 },
JsonRequestBehavior.AllowGet
);
只需将所有内容包装到新的匿名对象中
return Json(new { current = 1, rowCount = 10, rows = contacts, total = 1123 },
JsonRequestBehavior.AllowGet
);
您可能希望定义一个泛型类型来存储额外字段和项目列表
public class ItemsWithTotal<T> // for pete sake find a better name!
{
public int Current {get; set; }
public int RowCount {get; set; }
public int Total {get; set; }
public List<T> Rows {get; set; }
}
用法将是
var contacts = (from x in db.ContactSet
select new
{
x.AccountId,
x.FirstName,
x.LastName,
x.FullName,
x.JobTitle,
x.ParentCustomerId,
x.EMailAddress1,
x.Telephone1,
x.MobilePhone,
x.Fax,
x.GenderCode,
x.BirthDate
}).ToList();
var result = new ItemsWithTotal<ContactSet>(){
Current = 1,
RowCount = 10,
Total = 1123,
Rows = contacts
}
return Json(result);
您可能希望定义一个泛型类型来存储额外字段和项目列表
public class ItemsWithTotal<T> // for pete sake find a better name!
{
public int Current {get; set; }
public int RowCount {get; set; }
public int Total {get; set; }
public List<T> Rows {get; set; }
}
用法将是
var contacts = (from x in db.ContactSet
select new
{
x.AccountId,
x.FirstName,
x.LastName,
x.FullName,
x.JobTitle,
x.ParentCustomerId,
x.EMailAddress1,
x.Telephone1,
x.MobilePhone,
x.Fax,
x.GenderCode,
x.BirthDate
}).ToList();
var result = new ItemsWithTotal<ContactSet>(){
Current = 1,
RowCount = 10,
Total = 1123,
Rows = contacts
}
return Json(result);
您可以创建外观相同的viewmodel。即
public MyReturnModel{
public int Current {get; set;}
public int rowCount {get; set;}
public List<contacts> rows {get; set;}
public int total {get; set;}
}
然后在您的方法中,只需适当地分配每个属性并返回JSONify新的viewmodel并返回它。您可以创建一个外观相同的viewmodel。即
public MyReturnModel{
public int Current {get; set;}
public int rowCount {get; set;}
public List<contacts> rows {get; set;}
public int total {get; set;}
}
然后在您的方法中,只需适当地分配每个属性并返回JSONify新的viewmodel并返回它。看起来您正在使用jQuery网格,至少从您需要的输出来看是这样的 如果是这样,您可以执行以下操作 1创建所需的数据类型 进入控制器的输入 您需要的输出 2把所有的东西放在一起
看起来您正在使用jQuery网格,至少从您需要的输出来看是这样的 如果是这样,您可以执行以下操作 1创建所需的数据类型 进入控制器的输入 您需要的输出 2把所有的东西放在一起
这是一个干净的解决方案!非常感谢:这是一个如此干净的解决方案!非常感谢:你的对象类型应该是什么?@BarryMichaelDoyle同样的一排联系人。例如,列出联系人=新的。。。var tResult=ResponseData{current=model.current,rowCount=model.rowCount,rows=contacts,total=contacts.Count};在您的情况下,它看起来像是一个列表的通用列表。是吗?我很困惑,我在这里提出了一个新问题:哪一个更彻底地解决了这个问题。你的对象类型应该是什么?@BarryMichaelDoyle,同样的一排联系人。例如,列出联系人=新的。。。var tResult=ResponseData{current=model.current,rowCount=model.rowCount,rows=contacts,total=contacts.Count};在您的情况下,它看起来像是一个列表的通用列表。不是吗?我很困惑,我在这里提出了一个新问题:哪一个能更彻底地解决这个问题。