在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
{
}

所以…我有两个问题

  • 我正在创建正确的JSON对象来推送到我的web方法
  • 我如何在我的webmethod中反序列化对象,我的'OutGoings'结构应该采用什么结构?
  • 在webmethods中反序列化JSON

    您可能需要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; }
    }