所以我有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
?)
所有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;
}