C# Web Api返回数据集和Get

C# Web Api返回数据集和Get,c#,jquery,asp.net-web-api,dataset,asp.net-web-api2,C#,Jquery,Asp.net Web Api,Dataset,Asp.net Web Api2,我有代码,它在其中工作,因为它返回到正确的对象类型 jquery $(document).ready(function () { jQuery.support.cors = true; $.ajax({ url: '/api/News/5', type: 'GET', dataType: 'json', success: function (data) {

我有代码,它在其中工作,因为它返回到正确的对象类型

jquery

 $(document).ready(function () {
        jQuery.support.cors = true;
        $.ajax({
            url: '/api/News/5',
            type: 'GET',
            dataType: 'json',
            success: function (data) {
                WriteResponses(data);
            },
            error: function (x, y, z) {
                alert(x + '\n' + y + '\n' + z);
            }
        });

        //Displays in a Table
        function WriteResponses(allNews) {
            var strResult = "<table><th>Name</th><th>Student ID</th><th>Gender</th><th>Age</th>";
            $.each(allNews, function (index, news) {
                strResult += "<tr><td>" + news.id + "</td><td> " + news.title + "</td><td>" + news.body + "</td><td>" + news.body + "</td></tr>";
            });
            strResult += "</table>";
            $("#divResult").html(strResult);
        }

    });
然而,当我返回IQueryable时,这在上面起了作用

相反,我有一个想要返回的数据集,但它在代码中没有定义(是的,我在表的变量结构中更改了名称,例如news.StormOut等)

这就是我想要返回的,我真的不喜欢使用数据集和数据表,所以我愿意改变它

   [Route("GetCheckBox/{id?}")]
    public HttpResponseMessage GetCheckBoxes(int? id)
    {
        DataSet ds = new DataSet();
        using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["StormConnString"].ToString()))
        {

            string querystring = "SELECT StormOut, StormYes, StormNo FROM tblSignOnOff WHERE id = " + id;  // 3521 "
            SqlCommand cmd = new SqlCommand(querystring, conn);
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(ds, "Data");

        }

        //return ds;
        return Request.CreateResponse(HttpStatusCode.OK, ds);

    }

我将.net created Get方法的返回类型更改为DataTable,并收到此结果。方法如下:

// GET api/values
[AllowAnonymous]
public System.Data.DataTable Get() {
    DataSet ds = new DataSet();
    DataTable dt = new DataTable("Test");
    dt.Columns.Add("Col1");
    dt.Columns.Add("Col2");

    DataRow dr = dt.NewRow();
    dr[0] = "Column 1 value";
    dr[1] = "Column 2 value";
    dt.Rows.Add(dr);
    dt.AcceptChanges();
    return dt;
}
结果如下:

<DataTable xmlns="http://schemas.datacontract.org/2004/07/System.Data">
<xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="NewDataSet">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:MainDataTable="Test" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Test">
<xs:complexType>
<xs:sequence>
<xs:element name="Col1" type="xs:string" minOccurs="0"/>
<xs:element name="Col2" type="xs:string" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
<DocumentElement xmlns="">
<Test diffgr:id="Test1" msdata:rowOrder="0">
<Col1>Column 1 value</Col1>
<Col2>Column 2 value</Col2>
</Test>
</DocumentElement>
</diffgr:diffgram>
</DataTable>

第1列值
第2列值

我知道您现在可能已经离开了,但是您不应该从Web服务返回.Net对象,因为它限制了调用系统的可伸缩性

您应该以标准数据交换格式(如XML或JSON)传回数据。在使用JQuery AJAX调用时,JSON在我的选项中具有优势,因为客户端可以按原样使用对象,并且您可以使用强类型对象。使用Nuget的Newtonsoft JSON帮助程序,它与调用(c#)一样简单

然后从HTML/Javascript方面:

    var tr = '';
    $.each(response, function (i, item) {
        tr += '<tr><td>' + item.Name + '</td><td>' + item.Age + '</td><td>' + item.Gender + '</td></tr>';
    });
    $('#HTMLtable').append(tr);
var tr='';
$。每个(响应、功能(i、项目){
tr+=''+项目.姓名+''+项目.年龄+''+项目.性别+'';
});
$('HTMLtable')。追加(tr);

他正在传回XML。所描述的数据结构恰好是一个.NET对象,但没有什么能阻止他创建一个具有相同结构的JS对象以将其映射到。我根据您的建议创建了Web API Core Get方法以返回数据表。在客户端,我收到了一个字符串,可以将其转换为XML文件。Web API返回的字符串看起来有点不同。它有“DataTable.RemotingVersion”:{“major”:2,“minor”:0,“build”:-1,“revision”:-1,“majorRevision”:-1,“minorRevision”:-1},“XmlSchema”:标头。我无法用此XML文件向客户端的数据表提供数据。我想知道您是如何做到的?谢谢。
string json = JsonConvert.SerializeObject(dataSet, Formatting.Indented);
    var tr = '';
    $.each(response, function (i, item) {
        tr += '<tr><td>' + item.Name + '</td><td>' + item.Age + '</td><td>' + item.Gender + '</td></tr>';
    });
    $('#HTMLtable').append(tr);