所以我有httpget请求,它应该从我的数据库返回datatable
。我将我的数据表转换为EnumerableRowCollection
,然后将其序列化为json字符串(使用json.net):
public string GetResult(DataTable dt)
{
EnumerableRowCollection Result = from row in dt.AsEnumerable()
select new
{
account = (string)row["ACCOUNT_ID"],
balance = (decimal)row["BALANCE"]
};
string json = JsonConvert.SerializeObject(Result, Formatting.None);
return json;
}
然后我将它传递给控制器。
没关系 - 除了一件事 - 控制器本身正在序列化请求,我得到一个带有反斜杠的双序列化json字符串(这里是json的一部分):
[{\"account\":\"121\",\"balance\":-348}]
我无法弄清楚我怎样才能传递EnumerableRowCollection
(不使用json字符串),这样我才能获得双序列化的json? (或者我根本不应该把它转换为EnumerableRowCollection
?)
答案 0 :(得分:0)
所有WebAPI都可以返回的是您要返回的对象的序列化表示。
在此代码中,您将对象序列化为JSON字符串,然后再次对该字符串进行编码以成为JSON字符串。这会导致双引号。
您不需要自己序列化对象,并且确实无法使用EnumerableRowCollection
。创建DTO:
public class AccountBalanceModel
{
public string Account { get; set; }
public decimal Balance { get; set; }
}
然后从API方法返回,并让WebAPI处理序列化:
public IList<AccountBalanceModel> GetResult(DataTable dt)
{
var model = dt.AsEnumerable().Select(row => new AccountBalanceModel
{
Account = (string)row["ACCOUNT_ID"],
Balance = (decimal)row["BALANCE"]
}).ToList();
return model;
}