在webmethods中反序列化JSON
本文关键字:JSON 反序列化 webmethods | 更新日期: 2023-09-27 18:19:06
基于以下代码…
用户可以通过一个单独的功能添加任意数量的"支出"。然后向DOM添加一个新的'li',并自动生成文本ID
<ul id="ulOutgoing">
<li>
<label>Outgoing 1</label><input type="text" id="txtOutGoing0">
</li>
<li>
<label>Outgoing 2</label><input type="text" id="txtOutGoing1">
</li>
</ul>
在用户路径的末尾,我需要将所有文本值和标签发送到服务器,首先保存到数据库,然后根据提供的数据生成响应。
var OutGoings = {};
$('#ulOutgoing').find('li').each(function () {
var obj = {};
obj.text = $(this).find('label').html();
obj.value = $(this).find('input').val();
OutGoings.OutGoing = obj;
});
var DTO = { 'OutGoings': OutGoings };
function callBack(response) {
//Handel my webmethods response
}
ajaxCall(DTO, 'visualise-my-outgoings.aspx/getPieData', callBack, false);
我的web方法需要接受JSON对象并使其可用,这样我就可以循环文本值和标签,并执行一些数据库交互和进一步的逻辑
[WebMethod]
public static string getPieData(OutGoings OutGoings)
{
//Handel the object
}
public struct OutGoings
{
}
所以…我有两个问题
您可能需要OutGoing
的集合:
public class OutGoing
{
public string Label { get; set; }
public string Value { get; set; }
}
在你的页面方法:
[WebMethod]
public static string GetPieData(OutGoing[] outGoings)
{
// Handle the object
return "Hello World";
}
,最后客户端只是通过循环li
元素来填充这个集合:
var outGoings = $('#ulOutgoing li').map(function() {
return {
Label: $('label', this).html(),
Value: $('input', this).val()
};
}).toArray();
,然后POST到page方法:
$.ajax({
url: 'visualise-my-outgoings.aspx/GetPieData',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify({ outGoings: outGoings }),
success: function(result) {
// TODO : process the results
alert(result.d);
}
});
JSON.stringify
方法是什么正确序列化javascript数组成JSON字符串。它是内置的现代浏览器。如果需要支持旧浏览器,则可能需要在页面中包含json2.js脚本。
不要使用结构体,使用类。c#将为您处理反序列化。你想要这样的:
[WebMethod]
public void getPieData(OutGoings[] outGoings)
{
// loop over array, interact with db
}
public class OutGoings
{
public string Text{ get; set; }
public string Value{ get; set; }
}