Как передать данные JSON и преобразовать в объект в WebSerivce

#jquery #asp.net #ajax #web-services

#jquery #asp.net #ajax #веб-сервисы

Вопрос:

Я хочу иметь возможность конвертировать объект JSON, который передается через ajax (jquery) в моем веб-сервисе. На данный момент я могу заставить его вернуть сообщение «Привет, мир», но я не знаю, как получить доступ к переданным данным JSON, а затем преобразовать в коллекцию типа IList, чтобы я мог перебирать коллекцию. Я осмотрелся в stackoverflow, но я запутался, что делать, может кто-нибудь мне помочь.

Вот мой код:

jQuery:

 var data = { dvals: [{'Name' : 'Acer', 'Count' : '2'}, {'Name' : 'HP', 'Count' : '4'} ] };

function getProducts(json, pageIndex, pageSize) {
    json["PageIndex"] = pageIndex;
    json["PageSize"] = pageSize;

    $.ajax({
        type: 'POST',
        url: '/website2/WebServices/GetProducts.asmx/GetProductsAndFilters',
        data: JSON.stringify(json),
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        success: function (responseText) {
            //alert(responseText.d);
            $('.console').html(responseText.d);
        },
        error: function (xhr, status, error) {
            //var msg = JSON.parse(xhr.responseText);
            //alert(msg.Message);
            $('.console').html(xhr.responseText)
        }
    });
}
getProducts(data, '0', '2');
 

Мой asp.net С#:

 public class Filter
{
    public string Name;
    public int Count;
}
public class Product
{
    public int Id;
    public string Title;
    public string ShortDescription;
    public string Brand;
    public string Model;
    public double SellPrice;
    public string DescountPercentage;
    public int Votes;
    public int TotalRating;
    public double Rating
    {
        get
        {
            return Votes / TotalRating;
        }
    }
}

public class FiltersAndProducts
{
    List<Filter> Filters;
    List<Product> Products;
    int PageIndex;
    int PageSize;
}

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetProductsAndFilters()
{        
    return "Hello World";
}
 

Комментарии:

1. Вы можете создать объект javascript (соответствующий вашей структуре классов c #) и передать его в свой веб-сервис. Нет необходимости явно преобразовывать объект javascript в объект c #, если объект вашего js соответствует структуре классов вашего c #.

2. Можете ли вы дать мне пример того, что вы говорите, я давно этим не занимался. Я не знаю, о чем ты говоришь. Что я хочу сделать, так это выполнить операции, основанные на том, через какие фильтры проходят, и получить продукты, связанные с этими фильтрами. Если бы вы привели мне пример в моей функции GetProductsAndFilters, я мог бы понять, что вы говорите

Ответ №1:

Обратите внимание на различные способы его вызова здесь: http://encosia.com/using-complex-types-to-make-calling-services-less-complex /

Все дело в том, как вы определяете, что будет получать productsandfilters. Вы можете передавать как список или передавать как DTO.

Ответ №2:

если вы создаете класс, подобный

 public class dvals{

public string Name{get;set;}
public string Count{get;set;}

}
 

подготовить json

 var dvals =[{Name:'Acer',Count:'2'},{Name:'HP',Count:'4'}];
dval=JSON.stringify(dvals);
 

отправить через ajax

 $.ajax({
        type: 'POST',
        url: '/website2/WebServices/GetProducts.asmx/GetProductsAndFilters',
        data: dval,
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        success: function (responseText) {
            //alert(responseText.d);
              console.log(responseText);
            $('.console').html(responseText.d);
        },
        error: function (xhr, status, error) {
            //var msg = JSON.parse(xhr.responseText);
            //alert(msg.Message);
            $('.console').html(xhr.responseText)
        }
    });
 

сторона веб-сервиса

 [WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetProductsAndFilters(IList<dvals> dvalsList)
{        
    return "Hello World";
}
 

Комментарии:

1. Я попробую и свяжусь с вами позже, спасибо за время. Я надеюсь, что это сработает, если у кого-нибудь есть лучший способ оставить ответ, спасибо