httpweb请求带有数据词



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

相关内容

  • 没有找到相关文章

最新更新