C# webmethods中JSON的反序列化
基于以下代码 用户可以通过一个单独的功能来添加任意多的“支出”。然后我向DOM中添加一个新的'li',并自动生成txt IDC# webmethods中JSON的反序列化,c#,asp.net,ajax,json,webmethod,C#,Asp.net,Ajax,Json,Webmethod,基于以下代码 用户可以通过一个单独的功能来添加任意多的“支出”。然后我向DOM中添加一个新的'li',并自动生成txt ID <ul id="ulOutgoing"> <li> <label>Outgoing 1</label><input type="text" id="txtOutGoing0"> </li> <li> <label>
<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>
我的web方法需要接受JSON对象并使其可用,这样我就可以循环使用txt值和标签,并执行一些db交互和进一步的逻辑
[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";
}
$.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);
}
});
最后,客户端只需通过li
元素循环来填充此集合:
var outGoings = $('#ulOutgoing li').map(function() {
return {
Label: $('label', this).html(),
Value: $('input', this).val()
};
}).toArray();
然后将其发布到页面方法:
[WebMethod]
public static string GetPieData(OutGoing[] outGoings)
{
// Handle the object
return "Hello World";
}
$.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字符串的方法。它是本机内置的现代浏览器。如果需要支持传统浏览器,则可能需要将脚本包含到页面中。不要使用结构,请使用类。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; }
}
我的答案的干净版本,upvoted,可能会添加返回的字符串是result。d@Guillaume86,在您的回答中,您似乎没有使用此处所需的集合。是的,没有注意html,我删除了我的回答您可以使用map来避免之前创建数组populating@Guillaume86,非常好的建议。已更新答案以将其考虑在内。请参阅链接: