Httpweb请求数据表

时间:2017-02-17 06:22:41

标签: c# asp.net-web-api json.net

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

1 个答案:

答案 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;
}