Передача пользовательских объектов в веб-сервис - PullRequest
12 голосов
/ 04 июня 2009

Мне нужно передать пользовательский объект в удаленный веб-сервис. Я читал, что может быть необходимо реализовать ISerializable, но я сделал это и столкнулся с трудностями. Как правильно в C # передать пользовательский объект методу веб-службы?

Ответы [ 4 ]

7 голосов
/ 04 июня 2009

Объекты, которые вы предоставляете в качестве аргументов в качестве части запроса на обслуживание, должны быть помечены [Serializable], и ​​на основе некоторых ответов, опубликованных перед моим, также необходимо убедиться, что ваш пользовательский объект не содержит никаких параметров в конструкторе.

Также имейте в виду, что любая логика внутри вашего класса не будет создана в прокси-классе, который создается на стороне клиента. Все, что вы увидите на стороне клиента, это конструктор и свойства по умолчанию. Поэтому, если вы добавляете методы в свои пользовательские объекты, имейте в виду, что клиент не увидит их или не сможет их использовать.

То же самое относится к любой логике, которую вы можете поместить в любое из свойств.

Пример

[Serializable]
public class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
}
5 голосов
/ 04 июня 2009

Выглядит как дубликат этого вопроса

В любом случае, все объекты, вовлеченные во взаимодействия WS, должны быть XML-сериализуемыми, а не ISerializable (что является двоичной сериализацией). Более того, они должны быть описаны в сервисном контракте (WSDL), иначе клиенты не смогут их использовать. Эта статья должна быть полезна для понимания XML-сериализации с веб-службами XML.

Однако, если вы говорите о действительно пользовательских объектах (т.е. любых типах). Вам следует рассмотреть возможность передачи их в двоичном виде: либо в кодировке base64, либо в виде вложений. На вопрос, на который я ссылаюсь, есть ответ, как это сделать.

1 голос
/ 04 июня 2009

Редактировать: удалена часть о [Сериализуемый]

Вы создаете сервис или потребляете его?

Чтобы создать объект, который можно передать как параметр веб-метода, вам не нужно делать ничего особенного. Это если вы создаете asmx webservice.

OTOH, если вы создаете службу WCF, вы должны пометить класс с помощью [DataContract], а все члены, которые вы хотите сериализовать, с помощью [DataMember].

Если вы используете веб-сервис, то при добавлении ссылки на службу должны быть созданы прокси-классы для передаваемого объекта. Вы просто должны их использовать.

0 голосов
/ 04 июня 2009

Посмотрите на этот вопрос , чтобы увидеть, как реализовать сериализацию XML для ваших пользовательских объектов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...