Javascript 构建、发送和反序列化包含数组的json对象
我对JSON真的很陌生,但这里是我得到的。我需要创建一个包含数组/列表和两个平面字段的对象。例如:Javascript 构建、发送和反序列化包含数组的json对象,javascript,ajax,serialization,Javascript,Ajax,Serialization,我对JSON真的很陌生,但这里是我得到的。我需要创建一个包含数组/列表和两个平面字段的对象。例如: var names= new Array(); names[0] = "Christy"; names[1] = "Jeremy"; var obj = { names: names, age: "21+", comment: "friends" }; 然后我将其字符串化并尝试通过AJAX将其发送到pagemethod: var jsonData = JSO
var names= new Array();
names[0] = "Christy";
names[1] = "Jeremy";
var obj = {
names: names,
age: "21+",
comment: "friends"
};
然后我将其字符串化并尝试通过AJAX将其发送到pagemethod:
var jsonData = JSON.stringify(obj);
sendData(obj);
然后发送:
function sendData(jsonData) {
$.ajax({
type: "POST",
url: "Default.aspx/TestArray",
data: jsonData,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
alert('win');
},
error: function (a, b, ex) {
alert('fail');
}
});
}
因此,总而言之:
$(document).ready(function () {
$("#btnSubmit").click(function (e) {
e.preventDefault();
var names = new Array();
names[0] = "Christy";
names[1] = "Jeremy";
var obj = {
names: names,
age: "21+",
comment: "friends"
};
var jsonData = JSON.stringify(obj);
sendData(jsonData);
});
function sendData(jsonData) {
$.ajax({
type: "POST",
url: "Default.aspx/TestArray",
data: jsonData,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
alert(msg.d);
},
error: function (a, b, ex) {
alert("oops: " + ex);
}
});
}
});
我不确定我是否做对了。它甚至没有进入webmethod,而是直接进入error函数。但为了便于交谈,我在代码背后有以下内容:
[WebMethod()]
public static string TestArray(string guids)
{
Comment cmt = (Comment)JsonConvert.DeserializeObject(guids, typeof(Comment));
return "Winner";
}
当然,我想反序列化成:
public class Comment
{
public List<string> names { get; set; }
public string age { get; set; }
public string comment { get; set; }
}
公共类注释
{
公共列表名称{get;set;}
公共字符串年龄{get;set;}
公共字符串注释{get;set;}
}
您的json数据对象不必字符串化。JQuery会自动为其创建一个json对象:
var jsonData = JSON.stringify(obj);
sendData(jsonData);
可以成为:
sendData(obj);
此外,在代码隐藏中,您使用JSON.Net库中的JsonConvert,.Net还有一个名为JavaScriptSerializer的JSON解析器(有些有限)。这样,您就可以使用以下内容:
public static string TestArray(string guids)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
// Deserialize
Comment cmt = serializer.Deserialize<Comment>(guids);
}
publicstaticstringtestarray(字符串guid)
{
JavaScriptSerializer serializer=新的JavaScriptSerializer();
//反序列化
注释cmt=serializer.Deserialize(guids);
}
您的json数据对象不必字符串化。JQuery会自动为其创建一个json对象:
var jsonData = JSON.stringify(obj);
sendData(jsonData);
可以成为:
sendData(obj);
此外,在代码隐藏中,您使用JSON.Net库中的JsonConvert,.Net还有一个名为JavaScriptSerializer的JSON解析器(有些有限)。这样,您就可以使用以下内容:
public static string TestArray(string guids)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
// Deserialize
Comment cmt = serializer.Deserialize<Comment>(guids);
}
publicstaticstringtestarray(字符串guid)
{
JavaScriptSerializer serializer=新的JavaScriptSerializer();
//反序列化
注释cmt=serializer.Deserialize(guids);
}
根据web方法的签名:
public static string TestArray(string guids)
您必须发送一个字符串参数,而您发送的是一个不匹配的整个复杂JSON对象。因此:
var jsonData = JSON.stringify({ guids: 'foo bar' });
现在,如果要发送复杂结构,请使用:
public static string TestArray(Comment comment)
然后:
var names = new Array();
names[0] = "Christy";
names[1] = "Jeremy";
var obj = {
names: names,
age: "21+",
comment: "friends"
};
var jsonData = JSON.stringify({ comment: obj });
var names = new Array();
names[0] = "Christy";
names[1] = "Jeremy";
var obj = {
names: names,
age: "21+",
comment: "friends"
};
var jsonData = JSON.stringify({ comment: obj });
$.ajax({
type: "POST",
url: "Default.aspx/TestArray",
data: jsonData,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
// Notice the .d property. That's ASP.NET PageMethods
// serialize the response.
alert(msg.d);
},
error: function (a, b, ex) {
alert('fail');
}
});
此外,在web方法中,不要执行任何JSON序列化/反序列化。这是由框架为您处理的基础架构内容。因此,总结一下:
[WebMethod]
public static string TestArray(Comment comment)
{
return "Winner";
}
然后:
var names = new Array();
names[0] = "Christy";
names[1] = "Jeremy";
var obj = {
names: names,
age: "21+",
comment: "friends"
};
var jsonData = JSON.stringify({ comment: obj });
var names = new Array();
names[0] = "Christy";
names[1] = "Jeremy";
var obj = {
names: names,
age: "21+",
comment: "friends"
};
var jsonData = JSON.stringify({ comment: obj });
$.ajax({
type: "POST",
url: "Default.aspx/TestArray",
data: jsonData,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
// Notice the .d property. That's ASP.NET PageMethods
// serialize the response.
alert(msg.d);
},
error: function (a, b, ex) {
alert('fail');
}
});
此外,为了能够在将来轻松调试此类问题,我强烈建议您使用FireBug等javascript调试工具,该工具将显示您可能存在的任何潜在js错误以及包括AJAX请求在内的所有网络流量。根据web方法的签名:
public static string TestArray(string guids)
您必须发送一个字符串参数,而您发送的是一个不匹配的整个复杂JSON对象。因此:
var jsonData = JSON.stringify({ guids: 'foo bar' });
现在,如果要发送复杂结构,请使用:
public static string TestArray(Comment comment)
然后:
var names = new Array();
names[0] = "Christy";
names[1] = "Jeremy";
var obj = {
names: names,
age: "21+",
comment: "friends"
};
var jsonData = JSON.stringify({ comment: obj });
var names = new Array();
names[0] = "Christy";
names[1] = "Jeremy";
var obj = {
names: names,
age: "21+",
comment: "friends"
};
var jsonData = JSON.stringify({ comment: obj });
$.ajax({
type: "POST",
url: "Default.aspx/TestArray",
data: jsonData,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
// Notice the .d property. That's ASP.NET PageMethods
// serialize the response.
alert(msg.d);
},
error: function (a, b, ex) {
alert('fail');
}
});
此外,在web方法中,不要执行任何JSON序列化/反序列化。这是由框架为您处理的基础架构内容。因此,总结一下:
[WebMethod]
public static string TestArray(Comment comment)
{
return "Winner";
}
然后:
var names = new Array();
names[0] = "Christy";
names[1] = "Jeremy";
var obj = {
names: names,
age: "21+",
comment: "friends"
};
var jsonData = JSON.stringify({ comment: obj });
var names = new Array();
names[0] = "Christy";
names[1] = "Jeremy";
var obj = {
names: names,
age: "21+",
comment: "friends"
};
var jsonData = JSON.stringify({ comment: obj });
$.ajax({
type: "POST",
url: "Default.aspx/TestArray",
data: jsonData,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
// Notice the .d property. That's ASP.NET PageMethods
// serialize the response.
alert(msg.d);
},
error: function (a, b, ex) {
alert('fail');
}
});
此外,为了能够在将来轻松调试此类问题,我强烈建议您使用FireBug等javascript调试工具,该工具将显示您可能遇到的任何潜在js错误以及包括AJAX请求在内的所有网络流量。如果您这样做,jQuery将发布一组键/值对仍然不起作用。“内部服务器错误”。如果我从json对象中删除年龄和注释字段,并将其视为webmethod中的列表,则它可以工作。但是我需要数组。如果这样做,jQuery将发布一组键/值对仍然不起作用。“内部服务器错误”。如果我从json对象中删除年龄和注释字段,并将其视为webmethod中的列表,则它可以工作。但是我需要数组。有关在原始帖子正文中发送JSON数据的信息,请参阅。有关在原始帖子正文中发送JSON数据的信息,请参阅