C# 如何将列表连同硬编码根一起返回到JSON

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,

我不完全确定如何定义这个问题,但基本上我正在开发一个ASP.Net应用程序,其中生成一个名为IndexJson的JsonResult

我的代码如下:

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};在您的情况下,它看起来像是一个列表的通用列表。不是吗?我很困惑,我在这里提出了一个新问题:哪一个能更彻底地解决这个问题。