Web API - 输出值

时间:2017-10-24 07:13:19

标签: c# json asp.net-web-api

我有一个Web API方法,它将以如下形式返回值

[     {         “TransactionId”:“AJ978962017”,         “总计”:1.17     },     {         “TransactionId”:“AJ978972017”,         “总计”:8.9     } ]

我想要没有外部数组的输出如下

{         “TransactionId”:“AJ978962017”,         “总计”:1.17     },     {         “TransactionId”:“AJ978972017”,         “总计”:8.9     }

请建议如何实现所需的输出。

代码

[Authorize]
// ..api/EmpDetails/Id
public IEnumerable<EmpDetail> Get(string Id)
{
    using (WebAPIEntities WE = new WebAPIEntities())
    {
        var emp = WE.TrxDetails.Where(E => E.EmpId == Id).ToList();
        return emp;
    }
}

1 个答案:

答案 0 :(得分:0)

Linq扩展方法Where(...)返回IEnumerable<T>。列表中的过滤器在哪里,因此将返回列表(IEnumerable)。然后,您正在调用ToList()将其转换为List<T>。当您序列化为JSON时,IEnumerable<T>List<T>T[]都会(正确地)表示为JSON数组:[{...},{...},{。 ..}]

[Authorize]
// ..api/EmpDetails/Id
public IEnumerable<EmpDetail> Get(string Id)
{
    using (WebAPIEntities WE = new WebAPIEntities())
    {
        var emp = WE.TrxDetails.Where(E => E.EmpId == Id).ToList();
        return emp;
    }
}

如果您只想要一个项目,有几种方法可以使用Linq:

Single(...) - 只要该值在列表中是唯一的,就会返回一个值。如果找不到它会抛出错误。

SingleOrDefault(...) - 这将返回一个值,如果未找到则返回null。

First(...) - 这将返回第一个匹配值,如果没有,则抛出错误。

FirstOrDefault(...) - 这将返回第一个匹配值,如果没有,则返回null。

Last(...) - 这将返回最后一个匹配值,如果没有,则抛出错误。

LastOrDefault(...) - 这将返回最后一个匹配值,如果没有,则返回null。

上面返回的异常类型是:InvalidOperationException

我假设FirstOrDefault(...)足以满足你的情况:

[Authorize]
// ..api/EmpDetails/Id
public IEnumerable<EmpDetail> Get(string Id)
{
    using (WebAPIEntities WE = new WebAPIEntities())
    {
        return WE.TrxDetails.FirstOrDefault(E => E.EmpId == Id);
    }
}