Javascript ASP.NET-如何更改JSON序列化的方式?
我使用ASP.NET返回带有以下查询的Json文件:Javascript ASP.NET-如何更改JSON序列化的方式?,javascript,c#,asp.net,json,Javascript,C#,Asp.net,Json,我使用ASP.NET返回带有以下查询的Json文件: public ActionResult getTransactionTotals(int itemID) { DBEntities db = new DBEntities(); var query = from trans in db.Transactions // Linq query removed for brevity
public ActionResult getTransactionTotals(int itemID)
{
DBEntities db = new DBEntities();
var query = from trans in db.Transactions
// Linq query removed for brevity
into selection
select new TransactionAmount
{
name = selection.Key,
amount = selection.Select(t => t.TransactionId).Distinct().Count()
};
return Json(query.ToList(),JsonRequestBehavior.AllowGet);
}
下面是创建的对象:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace OhYeah
{
public class TransactionAmount
{
public String name { get; set; }
public int amount { get; set; }
}
}
以以下形式返回JSON:
[{"name":"billy", "amount":5}, {"name":"timmy", "amount":18}]
现在,我想编辑Linq查询或Json序列化程序以输出如下所示的Json:
[{"billy":5, "timmy":18}]
请注意,第二个Json是单个项目,其中“name”键现在是第一个Json中“name”的值。“名称”和“金额”键将被丢弃。“name”值始终是唯一的,不能有两个billy或timmy,因此不必考虑这一点
我该怎么做?这样试试
public ActionResult getTransactionTotals(int itemID)
{
DBEntities db = new DBEntities();
var query = (from trans in db.Transactions
// Linq query removed for brevity
into selection
select new TransactionAmount
{
name = selection.Key,
amount = selection.Select(t => t.TransactionId).Distinct().Count()
}).ToDictionary(k => k.name, v => v.amount);
return Json(query,JsonRequestBehavior.AllowGet);
}
序列化后将查询放入词典My TransactionMount没有ToDictionary方法。TransactionMount是一个非常基本的类,它只保存一个字符串和一个int。它不扩展可能包含ToDictionary的任何其他类。如何将ToDictionary功能添加到类中?在ToList之前和ToDictionary之后,在调用call
.ToList()
或ToDictionary()之前,您可能必须将查询包装在()
中;所以var query=(从trans……选择new{…})。ToDictionary()
感谢您的帮助Fabio和C Sharper!最后的解决方案稍有不同,介意我把你的帖子编辑成对我有用的吗?(从trans……选择new{…})。ToDictionary()也是对的,为我的错误道歉