2017-02-17 23 views
0

所以我有httpget请求,应该从我的数据库返回一个datatable。我将我的数据表为EnumerableRowCollection,然后序列化到JSON字符串(使用json.net):Httpweb请求数据表

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

WebAPI可以返回的所有内容都是要返回的对象的序列化表示形式。

在这段代码中,您将对象序列化为JSON字符串,然后该字符串再次被编码为JSON字符串。这会导致双引号。

您不需要自己序列化对象,而且确实没有必要使用EnumerableRowCollection。与序列

public class AccountBalanceModel 
{ 
    public string Account { get; set; } 
    public decimal Balance { get; set; }  
} 

然后返回从您的API方法,让这笔交易的WebAPI:创建一个DTO

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; 
} 
+0

泰!为我工作。除了.ToList(),它只有在我调用return model.ToList()时才起作用 – Eve

+0

是的,这是一个小的语法错误,我通常使用流利的语法。 – CodeCaster