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

所以我正在编写一些Asp.Net WebApi代码来挂钩旧的C#后端代码,其中没有使用的模型类. (Pure DataTable从DataAccess返回,Crazy对吧?我知道)

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

 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]);

    }

我希望得到这样的回复:

{
Field1: "field1",
Field2: "field2",
...
}

但实际上我有这个:

{
  "rowError": "",
  "rowState": 2,
  "table": [
    {
      Field1 : "field1",
      Field2 : "field2",
      ...
    }
  ],
  "itemArray": ["field1","field2"],
  "hasErrors": false
}

我不想要所有这些rowError,rowState等

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

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);

        }

我收到了这个:

[{Field1: "field1", Field2: "field2"..}]

遗憾的是,它被ngResource get方法拒绝,因为它是一个数组而不是一个Json对象.

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

理想情况下,我想避免按照Manoz的建议去创建响应对象的路径. (感谢您回答Manoz)

谢谢

最佳答案 您可以使用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]));
}

该操作可以根据需要返回JSON:{Field1:“field1”,Field2:“field2”,…}

点赞