请参阅下面的AJAX:
<script type="text/javascript" src="Javascript/json2.js"></script>
<script type="text/javascript" src="Javascript/jquery-1.11.1.min.js"></script>
<script type = "text/javascript">
function GetData() {
$.ajax({
type: "POST",
url: "JSONExample.aspx/GetPerson",
contentType: "application/json; charset=utf-8",
dataType: "text",
success: OnSuccess(),
//async: false,
failure: function (response) {
alert('there was an error counting possibles')
}
});
function OnSuccess() {
return function (response) {
alert(response);
window.location.href("JSONExample.aspx?id=" + response);
}
}
}
GetData()
</script>
以及下面的服务器端代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using Newtonsoft.Json;
namespace SerializeAndDeserializeJSON
{
//[Serializable]
public class Person
{
public String Name;
public int Age;
}
public partial class JSONExample : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if ((Request.QueryString["id"]== null)==false)
{
var json = Request.QueryString["id"];
var person = JsonConvert.DeserializeObject<Person>(json); //person is null
}
}
[System.Web.Services.WebMethod]
public static Person GetPerson()
{
Person p1 = new Person();
p1.Name = "Ian";
p1.Age=35;
return p1;
}
}
}
在页面加载中,在页面加载后,Person对象的值如下:
名称:null 年龄:0
这个名字应该是伊恩,而年龄应该是35岁。我做错了什么?
答案 0 :(得分:2)
我做错了什么?
尝试将dataType设置为json
而不是text
:
dataType: 'json'
然后将javascript对象作为JSON字符串发送到id
参数:
window.location.href("JSONExample.aspx?id=" + encodeURIComponent(JSON.stringify(response.d)));
请注意,我们在这里使用response.d
,因为ASP.NET WebMethods使用此特殊属性序列化响应。
此外,您可能希望使用公共属性而不是模型的字段:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
某些框架在字段上窒息。