#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. Вам нужно преобразовать ваш объект в строку. Смотрите мой отредактированный ответ. Часть сериализации одинакова и для классических веб-сервисов. Однако необходимые атрибуты будут другими.