如何从Asp Web API返回单个DataRow对象?

Typ*_*nda 5 c# asp.net json asp.net-web-api

因此,我正在编写一些Asp.Net WebApi代码,以与没有使用模型类的旧C#后端代码挂钩。(从DataAccess返回的纯dataTable,疯狂吧?我知道)

以下是我放在服务器端的代码。

 public IHttpActionResult GetProduct(int campaignID, int productID)
    {
        var so = new SearchOptions(campaignID)
        {
            ProductID = productID
        };

        var result = SearchManager.Search(so);
        if (result == null || result.Rows.Count == 0)
            return NotFound();
        return Ok(result.Rows[0]);

    }
Run Code Online (Sandbox Code Playgroud)

我期望得到这样的响应:

{
Field1: "field1",
Field2: "field2",
...
}
Run Code Online (Sandbox Code Playgroud)

但是实际上我有这个:

{
  "rowError": "",
  "rowState": 2,
  "table": [
    {
      Field1 : "field1",
      Field2 : "field2",
      ...
    }
  ],
  "itemArray": ["field1","field2"],
  "hasErrors": false
}
Run Code Online (Sandbox Code Playgroud)

我不希望所有这些rowErrorrowState...等

如果我在服务器端这样做:

public IHttpActionResult GetProduct(int campaignID, int productID)
        {
            var so = new SearchOptions(campaignID)
            {
                ProductID = productID
            };

            var result = SearchManager.Search(so);
            if (result == null || result.Rows.Count == 0)
                return NotFound();
            return Ok(result);

        }
Run Code Online (Sandbox Code Playgroud)

我收到这个:

[{Field1: "field1", Field2: "field2"..}]
Run Code Online (Sandbox Code Playgroud)

不幸的ngResource是,由于它是一个数组而不是单个Json对象,因此get方法拒绝了它。

我该怎么办?如果我只想返回一个dataRow作为Json字符串。

理想情况下,我想避免像Manoz所建议的那样去创建响应对象。(不过谢谢您的回答Manoz)

谢谢

fee*_*per 2

您可以使用 LINQ将您的转换DataRow为:Dictionary

public IHttpActionResult GetProduct(int campaignID, int productID)
{
    var so = new SearchOptions(campaignID)
    {
        ProductID = productID
    };

    var result = SearchManager.Search(so);
    if (result == null || result.Rows.Count == 0)
        return NotFound();

    var row = result.Rows[0];
    return Ok(row.Table.Columns
        .Cast<DataColumn>()
        .ToDictionary(c => c.ColumnName, c => row[c]));
}
Run Code Online (Sandbox Code Playgroud)

该操作会根据您的需要返回 JSON:{ Field1: "field1", Field2: "field2", ... }