我可以在ID为键而不是ASP.NET MVC(C#)中的数组的情况下输出JSON吗 - javascript

因此,在ASP.NET MVC中,我有一个Controller动作,如下所示:

public JsonResult People()
{
    var people = db.People.ToList();
    return Json(people);
}

并在退出时将返回如下内容:

[
  {
    "ID": 1,
    "Name": "John Smith"
  },
  {
    "ID": 2,
    "Name": "Daryl Jackson"
  }
]

但是,我要寻找的不是如上所述的记录的JSON数组,而是一个JSON对象,其中每个记录的ID是键,然后将记录嵌套为值,例如:

{
  1: {
    "Name": "John Smith"
  },
  2: {
    "Name": "Daryl Jackson"
  }
}

我最初的想法是在C#中创建类似于此结构的Dictionary,并将其传递给Json(),但是该方法不知道如何处理Dictionary对象。

有没有办法在C#中实现这种结构?目前,我不得不在客户端进行重组,或者使用循环来查找具有我要搜索的ID的记录。如果我可以通过Java中的ID获得记录,那就更好了。我要解决所有这些错误吗?我是ASP.NET MVC环境的新手。

任何建议将不胜感激。谢谢 :)

参考方案

您可以使用ToDictionary()扩展方法。

public ActionResult People()
{
   var peopleDictionary = db.People
                          .Select(x=> new {  Id = x.Id, Name= x.FirstName})
                          .ToDictionary(d => d.Id.ToString(), p => p);

   return Json(peopleDictionary, JsonRequestBehavior.AllowGet);
}

假设您的人员表具有IdFirstName列,则此代码将从表数据中返回类似json的字典

{ "101" : {"Id":101,"Name":"John"},"102":{"Id":102,"Name":"Darryl"} }

使用Json方法,您无法序列化字典键为int类型的字典,因此需要将int值显式转换为字符串。

如果要从userId获取特定用户,则可以使用字典样式语法yourJsObject[key]

 var url="PutRelativeUrlToReportScoreHere";
 $.getJSON(url, function(data) {
        console.log(data);
        //Get the User with Key 102
        console.log(data[102]);
 });

在线测试系统ASP.NET MVC - javascript

我能够按ID显示问题,但不知道如何为不同用户随机显示问题,并且每次用户登录新的随机组合时都会显示问题。有人可以指导吗?我的控制器:public ActionResult Index() { var question = Quiz.Instance.LoadQuiz(); return View(question); } [HttpPost] public A…

调试捆绑和版本化的javascript文件 - javascript

我已经使用Bundleconfig.cs将我的JavaScript文件打包如下:bundles.Add(new ScriptBundle("~/bundles/resultscripts").Include( "~/Scripts/spectrum.js", "~/Scripts/notify.js"…

Visual Studio,ASP.Net(.Net Framework),并在项目中包含NuGet安装的软件包 - javascript

我在Visual Studio 2017中有一个主要由JavaScript组成的ASP.Net(.Net Framework)MVC Web应用程序。我已经使用NuGet安装了一个软件包(特别是marker-animate-unobtrusive软件包。)文档继续说我应该在我的HTML页面中包含JavaScript,但是在仔细检查了NuGet的内容后,我不确…

.NET C#Webbrowser填充输入,不带ID或类名 - javascript

我需要在网络浏览器中填写一个输入,但这不起作用。我认为必须使用name属性来完成,但是怎么做呢?foreach (HtmlElement login in webBrowser1.Document.GetElementsByTagName("input")) { if (login.GetAttribute("name"…

ASP.NET-如何更改JSON序列化的方式? - javascript

我正在使用ASP.NET通过以下查询返回Json文件:public ActionResult getTransactionTotals(int itemID) { DBEntities db = new DBEntities(); var query = from trans in db.Transactions // Linq query removed …