你可以试试这个:
// your data
var q = new[]
{
new {OBJECT = "Random_Name_1", QTY = 5, TYPE = "A"},
new {OBJECT = "Random_Name_2", QTY = 3, TYPE = "B"},
new {OBJECT = "Random_Name_3", QTY = 8, TYPE = "B"}
};
// construct the object
var obj = new
{
Success = true,
Message = string.Format("Total rows {0}", q.Count()),
Data = q.ToDictionary(
item => item.OBJECT,
item => item.GetType().GetProperties()
.Where(p => p.Name != "OBJECT")
.ToDictionary(p => p.Name, p => p.GetValue(item, null)))
};
// serialize the object (note that you don't need to do that from web api)
var json = JsonConvert.SerializeObject(obj);
注意taht如果你已经知道的数据(即列)的结构,那么你可以通过避免反射更有效率。意思是:
var obj = new
{
Success = true,
Message = string.Format("Total rows {0}", q.Count()),
Data = q.ToDictionary(
item => item.OBJECT,
item => new { item.QTY, item.TYPE })
};
喔好,我看到你在做什么有,是的,我试了一下,问题是,Random_Name_1可能不止一次,所以随着Random_Name_1,Random_Name_2,Random_Name_3我会有3个不同的表,具有相同的数据结构,bue“Random_Name”是一个机器的名称,并且具有表事件(明星/关闭/开始工作/结束工作/等等等等) – Rafa
然后你的数据集不能用你描述的形式表示,检查一下JSON是什么,对象中的每个字段必须是唯一的,你不能一个JSON对象中具有相同名称的多个字段。使用数组而不是字典。 – Nikolay
事情是,我只想打1分钟的数据库,检索可以说50个表(每个机器我想分析一个),我想为每个表创建1个js数组。所以,我只是在我的查询中为每个表添加一个标识符,然后在C#中我将这些表分开而不返回标识符 – Rafa