Возможно ли опубликовать весь объект Javascript через Jquery Ajax post в .Веб-сервис Net?

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

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

Вопрос:

в текущей ситуации, когда мы отправляем данные с веб-страницы через Jquery Ajax post в веб-сервис, мы создаем строку Json с двумя или тремя параметрами, и у нас есть веб-сервис с методом, который принимает те же (именованные) параметры.

Но теперь у меня в моем javascript есть объект с 10 свойствами, и мне было интересно, могу ли я опубликовать весь этот объект в своем веб-сервисе.

Я пытался опубликовать объект и у меня есть параметр типа ‘Object’ в веб-сервисе, но это не сработало.

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

1. В зависимости от структуры и содержимого объекта, это не должно быть проблемой. Какова структура?

2. это объект с 10 свойствами (все строки)

Ответ №1:

Да, это возможно. Вам нужно создать класс и сделать его сериализуемым с помощью атрибута DataContract. Затем вы используете DataMember для обозначения членов класса, подлежащих сериализации. Подойдет что-то вроде этого:

 [DataContract(Namespace = "http://www.yournamespace/")]
public class MyObject
{
    [DataMember]
    public long Id { get; set; }

    [DataMember]
    public String Name { get; set; }
}
  

Затем в вашем сервисе WCF:

     [OperationContract]
    [WebInvoke(Method = "POST", RequestFormat=WebMessageFormat.Json)]
    public bool HandleObject(MyObject myObject)
    {

    }
  

В клиентском коде сделайте что-то вроде этого:

     $.ajax({ url: url,
        type: "POST",
        data: '{"myObject":'   json2string(myObject)   '}',
        contentType: "application/json",
        dataType: "json",
        success: function(data) {}
    });
  

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

1. что я буду отправлять в сервис в качестве данных? объект, JSON. Stringify’d версия моего объекта? Можете ли вы помочь мне с вызывающим кодом?

2. кстати, мы используем веб-сервисы, а не wcf, влияет ли это на ответ?

3. Вам нужно преобразовать ваш объект в строку. Смотрите мой отредактированный ответ. Часть сериализации одинакова и для классических веб-сервисов. Однако необходимые атрибуты будут другими.