【问题标题】:Return a single element instead of an array from a WebAPI action method从 WebAPI 操作方法返回单个元素而不是数组
【发布时间】:2017-01-30 10:04:30
【问题描述】:

这是我在 asp.net web-api 控制器中的代码。

   [Route("~/GetLoginEmployeeInfo")]
    public DataTable GetLoginEmployeeInfo()
    {
        DataTable dtUserInfo = new DataTable();
        Hashtable htMenuList = new Hashtable();
        htMenuList.Add("LoginKey", 20160636);
        htMenuList.Add("Passkey", 123);          
        dtUserInfo = DataTableByCommandFromStoredProc("GetUserByIDAndPass", htMenuList);          
        return dtUserInfo;  }

在 WebApiConfig 我添加了:

config.Formatters.Remove(config.Formatters.XmlFormatter); 

我得到 json 的结果为:[{"EmpID":"20160636","FullName":"Md Delower Hossain"}]

但我希望如下:{"EmpID":"20160636","FullName":"Md Delower Hossain"}

为了我的编程目的,应该省略括号 []。我能做什么?

【问题讨论】:

  • linq 优先还是默认有效?返回 dtUserInfo.FirstOrDefault();
  • @BryanDellinger ty,这工作

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


【解决方案1】:

您的代码返回“标准 JSON 格式”,它只是一个数组。

这是因为 DataTable 包含一个数据表,正如它的名字已经给出的那样。即使表包含一行,它的数据也会以数组的形式返回,在这种情况下是一个元素长的数组。

如果你总是只想返回第一行,那么就这样做:

public DataRow GetLoginEmployeeInfo()
{
    // ...
    return dataTable.Rows[0];
}

考虑创建一个包含这些属性的模型类而不是 DataTable。

【讨论】:

  • 不幸的是DataRow 不可序列化,所以这可能会失败。不过,正如您所写的,使用自定义类也可以。
  • 如果不从数据表返回一个数组就不可能返回一个对象吗?因为数据表有很多行。
  • @Md.DelowerHossain “数据表有很多行” - 那你为什么不想返回一个数组呢?
猜你喜欢
  • 1970-01-01
  • 2020-01-12
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
  • 2014-06-27
  • 1970-01-01
  • 2021-10-04
  • 1970-01-01
相关资源
最近更新 更多