我是JSON的新手,并希望使用StringBuilder创建简单的JSON对象,这将通过jQuery Ajax调用进行查询。
[WebMethod]
public static string GetmyJSON()
{
StringBuilder sb = new StringBuilder();
sb.Append("{firstname: \"Manas\",").Append("lastname : \"Tunga\"").Append("}");
return sb.ToString();
}
在我的客户端代码中我有:
.ajax({
type: "POST",
url: "simplePage.aspx/GetmyJSON",
data: "{}",
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (data) {
alert(data.d.firstname);
} // end of sucess
}); // End of ajax
但我的警告信息显示'undefined'而不是'Manas'。 是否可以使用StringBuilder返回JSON对象?
答案 0 :(得分:10)
从不这样做。 从不手动构建JSON。 始终使用JSON序列化程序。或者在您的情况下,您甚至不需要这样做,因为ASP.NET webmethod运行时会照顾。您所要做的就是专注于您的业务需求,而不必担心管道。
例如,首先定义一个代表您数据的模型:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
然后让您的Web方法返回此模型,将所有序列化问题留给框架:
[WebMethod]
public static Person GetPerson()
{
Person p = new Person();
p.FirstName = "Manas";
p.LastName = "Tunga";
return p;
}
现在只需从客户端使用此方法:
$.ajax({
type: 'POST',
url: 'simplePage.aspx/GetPerson',
data: '{ }',
contentType: 'application/json; charset=utf-8',
success: function (data) {
alert(data.d.FirstName);
alert(data.d.LastName);
}
});
无需担心JSON,字符串构建器......
如果您需要,还可以将复杂的参数传递给Web方法:
public class Foo
{
public string Bar { get; set; }
}
然后:
[WebMethod]
public static Person GetPerson(Foo foo)
{
...
}
最后:
$.ajax({
type: 'POST',
url: 'simplePage.aspx/GetPerson',
data: JSON.stringify({ foo: { bar: 'baz' } }),
contentType: 'application/json; charset=utf-8',
success: function (data) {
alert(data.d.FirstName);
alert(data.d.LastName);
}
});
此处显示的JSON.stringify
方法本身内置于现代浏览器中。如果您需要支持旧版浏览器,则可以在页面中加入json2.js脚本。
答案 1 :(得分:3)
var lstMes = new List<Person>();
System.Web.Script.Serialization.JavaScriptSerializer oSerializer =
new System.Web.Script.Serialization.JavaScriptSerializer();
string sJSON = oSerializer.Serialize(lstMes);
return sJSON;
不要忘记添加对:
的引用System.Web.Extensions.dll !!
答案 2 :(得分:0)