我是ASP.NET / C#的菜鸟。我正在尝试使用Web服务从数据库返回JSON对象。我在Firebug中遇到错误,我正在创建一个循环引用。堆栈跟踪采用JSON格式。当我直接在浏览器中查看Web服务时,它会因某些奇怪的原因返回有效的XML。这是我的网络服务。
[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>
答案 0 :(得分:1)
您获取XML的原因是因为DataSet
序列化为XML。但是,您可以使用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));
}
}