所以我正在编写一些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”,…}