在我的项目中,我正在开发WebService(使用带有EF6的WebAPI 2)。此服务应返回JSON消息,它是。但该消息是一种不方便的格式。
控制器是:
public class Arguments
{
public int arg1{ get; set; }
public int arg2{ get; set; }
}
[Route("webroute")]
[HttpPost]
[AcceptVerbs("POST")]
public IHttpActionResult FindTodos(Arguments args)
{
return Ok(_repo.BuscaOrdens(args.arg1, args.arg2));
}
repo方法如下:
public object FindTodos(int arg1, int arg2)
{
dynamic nextDeadlines = _ctx.Todos
.Where(o => o.field1 == arg1 && o.field2 == arg2)
.OrderByDescending(o => o.field3)
.ThenBy(o => o.ts)
.Take(10)
.Select(x => new
{
x.Field4,
x.Field5
}).ToList();
dynamic delayed = _ctx.Todos
.Where(o => o.field1 == arg1 && o.field2 == arg2)
.OrderBy(o => o.field3)
.ThenByDescending(o => o.ts)
.Take(10)
.Select(x => new
{
x.Field4,
x.Field5
}).ToList();
return new List<object> { new List<object> {"NextDeadlines", nextDeadlines}, new List<object> { "Delayed", delayed} };
}
它给我的JSON返回是:
[
[
"NextDeadlines",
[
{
"Field4": 2000,
"Field5": 1.05
},
{
"Field4": 1000,
"Field5": 1
}
]
],
[
"Delayed",
[
{
"Field4": 500,
"Field5": 1.1111111111111112
}
]
]
]
最后我期待得到的是这样的:
[
"NextDeadlines":
[
{
"Field4": 2000,
"Field5": 1.05
},
{
"Field4": 1000,
"Field5": 1
}
],
"Delayed":
[
{
"Field4": 500,
"Field5": 1.1111111111111112
}
]
]
关于要纠正什么的任何想法?
提前致谢! 埃里希
答案 0 :(得分:1)
首先,您期望的json无效。我怀疑你的意思是
[
{
"NextDeadlines":
[
{
"Field4": 2000,
"Field5": 1.05
},
{
"Field4": 1000,
"Field5": 1
}
],
"Delayed":
[
{
"Field4": 500,
"Field5": 1.1111111111111112
}
]
}
]
如果是这种情况,则需要将最后一行修改为
return new List<object> { new List<object> {"NextDeadlines", nextDeadlines}, new List<object> { "Delayed", delayed} };
到
return new List<object> { new {NextDeadlines = nextDeadlines}, new { Delayed = delayed} };