我试图使用asp.net web服务将从MySql数据库获得的JSON数据发送到web应用程序,该应用程序使用jQuery显示通过JSON发送的数据。
我的webservice方法如下所示:
[WebMethod(Description = "yet another test .....")]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetCustomerByIDTRY()
{
string connString = System.Configuration.ConfigurationManager.ConnectionStrings["my_domain_mysql"].ConnectionString;
MySqlConnection connection1 = new MySqlConnection(connString);
MySqlCommand cmd = new MySqlCommand("SELECT Vet_Users.FirstName, Vet_Users.LastName, Vet_Users.UserID, Vet_Customer.CusID FROM Vet_Users JOIN Vet_Customer ON Vet_Users.UserID=Vet_Customer.UserID");
DataSet CusIDDataSet = new DataSet();
MySqlDataAdapter CusIDDataAdapter = new MySqlDataAdapter(cmd);
CusIDDataAdapter.SelectCommand.Connection = connection1;
CusIDDataAdapter.Fill(CusIDDataSet, "reading");
connection1.Close();
StringBuilder JSON = new StringBuilder();
JSON.Append("{");
JSON.Append("\"NumberOfCustomers\":\"" + CusIDDataSet.Tables[0].Rows.Count.ToString() + "\", ");
JSON.Append("\"Customer\":[");
foreach (DataRow rs in CusIDDataSet.Tables[0].Rows)
{
JSON.Append("{");
JSON.Append("\"CusID\":\"" + rs["CusID"].ToString() + "\",");
JSON.Append("\"FirstName\":\"" + rs["FirstName"].ToString() + "\",");
JSON.Append("\"LastName\":\"" + rs["LastName"].ToString() + "\",");
if (JSON.ToString().EndsWith(","))
JSON = JSON.Remove(JSON.Length - 1, 1);
JSON.Append("},");
}
if (JSON.ToString().EndsWith(","))
JSON = JSON.Remove(JSON.Length - 1, 1);
JSON.Append("]}");
return JSON.ToString();
}JSON是这样返回的:
Object { d="{"NumberOfCustomers":"1...","LastName":"Woods"}]}"}它包装在一个"d“中,导致了asp.net 3.5+安全问题。(http://encosia.com/never-worry-about-asp-net-ajaxs-d-again/)
但是我的JSON是用双引号包装的,我不知道为什么。
"{"NumberOfCustomers":"15", "Customer":[{"CusID":"1","FirstName":"Ina","LastName":"Williamson"},{"CusID":"2","FirstName":"Hyacinth","LastName":"Brady"},{"CusID":"3","FirstName":"Coby","LastName":"Shannon"}]}"这是jQuery函数,我试着工作:
function FinalTest() { $.ajax({ type: "POST", url: "url", data: "{}", contentType: "application/json; charset=utf-8", dataType: "json", success: function (data) { alert(eval(data.d.NumberOfCustomers)); } }); };
发布于 2014-06-11 15:08:28
不要手动序列化JSON。框架将为您处理这一问题。更多信息在这里:http://encosia.com/asp-net-web-services-mistake-manual-json-serialization/
这样做,JavaScriptSerializer将为您处理构建有效的JSON:
public class Customer {
public string CusID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
[WebMethod(Description = "yet another test .....")]
[ScriptMethod]
public object GetCustomerByIDTRY() {
string connString = System.Configuration.ConfigurationManager.ConnectionStrings["my_domain_mysql"].ConnectionString;
MySqlConnection connection1 = new MySqlConnection(connString);
MySqlCommand cmd = new MySqlCommand("SELECT Vet_Users.FirstName, Vet_Users.LastName, Vet_Users.UserID, Vet_Customer.CusID FROM Vet_Users JOIN Vet_Customer ON Vet_Users.UserID=Vet_Customer.UserID");
DataSet CusIDDataSet = new DataSet();
MySqlDataAdapter CusIDDataAdapter = new MySqlDataAdapter(cmd);
CusIDDataAdapter.SelectCommand.Connection = connection1;
CusIDDataAdapter.Fill(CusIDDataSet, "reading");
connection1.Close();
var customers = new List<Customer>();
foreach (DataRow rs in CusIDDataSet.Tables[0].Rows) {
customers.Add(new Customer {
CusID = rs["CusID"].ToString(),
FirstName = rs["FirstName"].ToString(),
LastName = rs["LastName"].ToString()
});
}
return new {
NumberOfCustomers = CusIDDataSet.Tables[0].Rows.Count.ToString(),
Customer = customers
};
}https://stackoverflow.com/questions/24162819
复制相似问题