0

私はASP.NET/C#の初心者です。Webサービスを使用してデータベースからJSONオブジェクトを返そうとしています。循環参照を作成しているというエラーがFirebugで発生します。スタックトレースはJSON形式です。ブラウザで直接Webサービスを表示すると、奇妙な理由で有効なXMLが返されます。これが私のWebサービスです。

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public DataSet Posts() {
    string connString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["XXX"].ConnectionString;
    SqlConnection conn = new SqlConnection(connString);
    string sql = "SELECT * FROM Posts";
    SqlDataAdapter sda = new SqlDataAdapter(sql, conn);
    DataSet ds = new DataSet();
    sda.Fill(ds);
    return ds;
}

私はC#を初めて使用するので、これが正しく記述されているかどうかはわかりません。私が欲しいのはJSON形式のDataSetです。私はこれを正しく行っていますか?これがWebサービスを呼び出しているjQueryです。

<script>
    $(function () {
         $.ajax({
            type: "POST",
            url: "WebServices/MessageBoard.asmx/Posts",
            data: "{}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(data) { console.log(data) },
            failure: function (msg) {
                //alert(msg);
            }
        });

    });
</script>
4

1 に答える 1

1

XML を取得する理由は、 が XML にDataSetシリアル化されるためです。ただし、JSON.NETを使用して XML を JSON に変換できます。次に例を示します。

using System;
using System.Collections.Generic;
using System.Data;

using Newtonsoft.Json;

class Program
{
    static void Main(string[] args)
    {
        var dataSet = new DataSet();
        var dataTable = new DataTable();
        for (int i = 0; i < 5; i++) { dataTable.Columns.Add(string.Format("Column{0}", i), typeof(string)); }
        for (int i = 0; i < 5; i++)
        {
            var vals = new List<object>();
            for (int j = 0; j < 5; j++) { vals.Add(string.Format("Value {0}", j)); }
            dataTable.LoadDataRow(vals.ToArray(), true);
        }

        dataSet.Tables.Add(dataTable);
        dataSet.AcceptChanges();

        Console.WriteLine(JsonConvert.SerializeObject(dataSet));
    }
}
于 2012-09-28T17:06:42.297 に答える