Де сериализация JSON в веб-методах - PullRequest
1 голос
/ 29 декабря 2011

На основании следующего кода ...

Пользователь может прийти и добавить столько «расходов», сколько пожелает, с помощью отдельной функции. Затем я добавляю новый 'li' в DOM и автоматически генерирую txt 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>    

В конце пути пользователя мне нужно отправить все значения txt и метки на сервер, чтобы сначала сохранить их в БД, а затем сгенерировать ответ на основе предоставленных данных.

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);

Мой веб-метод должен принять JSON Object и сделать его пригодным для использования, чтобы я мог циклически перебирать значение txt и метки и выполнять некоторые взаимодействия с БД и дополнительную логику

[WebMethod]
public static string getPieData(OutGoings OutGoings)
{
    //Handel the object
}

public struct OutGoings
{

}

Итак ... у меня два вопроса

Я создаю правильный объект JSON для отправки в мой веб-метод Как десериализовать объект в моем веб-методе и какую структуру должна принять моя структура OutGoings?

Ответы [ 2 ]

3 голосов
/ 29 декабря 2011

Возможно, вам нужен набор 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 elements:

var outGoings = $('#ulOutgoing li').map(function() {
    return {
        Label: $('label', this).html(),
        Value: $('input', this).val()
    };    
}).toArray();

, а затем отправьте его в метод страницы:

$.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 на свою страницу.

0 голосов
/ 29 декабря 2011

Не используйте структуру, используйте класс.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; }
}
...