C# 带有datatable的Httpweb请求

C# 带有datatable的Httpweb请求,c#,asp.net-web-api,json.net,C#,Asp.net Web Api,Json.net,所以我有一个httpget请求,它应该从我的数据库返回一个datatable。我将数据表转换为EnumerablerRowCollection,然后将其序列化为json字符串(使用json.net): 然后我把它传给控制器 没关系-除了一件事-控制器本身正在序列化请求,我得到一个带有反斜杠的双序列化json字符串(这里是json的一部分): 我不知道如何传递EnumerablerRowCollection(不使用json字符串),这样我就不会得到双重序列化的json了?(或者我根本不应该将其转换

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

然后我把它传给控制器

没关系-除了一件事-控制器本身正在序列化请求,我得到一个带有反斜杠的双序列化json字符串(这里是json的一部分):


我不知道如何传递
EnumerablerRowCollection
(不使用json字符串),这样我就不会得到双重序列化的json了?(或者我根本不应该将其转换为
EnumerablerRowCollection

WebAPI可以返回的只是要返回的对象的序列化表示

在这段代码中,您将一个对象序列化为一个JSON字符串,然后将该字符串再次编码为一个JSON字符串。这导致了双重引用

您不需要自己序列化对象,实际上使用
EnumerablerRowCollection
也没有用。创建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;
}
public IList GetResult(数据表dt)
{
var model=dt.AsEnumerable().选择(行=>new AccountBalanceModel
{
帐户=(字符串)行[“帐户ID”],
余额=(十进制)行[“余额”]
}).ToList();
收益模型;
}

Ty!为我工作。除了.ToList(),只有当我调用return model.ToList()时它才起作用。是的,这是一个小的语法错误,我通常使用流畅的语法。
public class AccountBalanceModel
{
    public string Account { get; set; }
    public decimal Balance { get; set; }    
}
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;
}