Передача сериализованного объекта через веб-сервис или Передача объекта - PullRequest
0 голосов
/ 06 августа 2010

У меня есть веб-сервис в C # .NET со следующим пространством имен:

[WebService (Namespace = "http://enterpriseName/wsName")]

Веб-сервис содержит WebMethod GetServiceObject и класс MyObject.Этот веб-метод возвращает строку, содержимое которой является сериализованным экземпляром MyObject.

[WebMethod (MessageName = "GetServiceObjectXML" Description = "Get ServiceObject from Server to Client")]  
public string GetServiceObjectXML ()

Этот метод возвращает следующий XML:

<? Xml version = "1.0" encoding = "utf-16"?>
<ServiceObject Xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Services>
 <service>
  <id>3</id>
  <date>02/08/2010</date>
 </service>
</Services>
</ServiceObject>

Проблема, с которой я сталкиваюсь, заключается в том, что при вызовеэтот метод со стороны клиента и попробуйте десериализовать этот xml в класс MyObject, и я получу объект NULL.

После этого я создал новый WebMethod со следующей подписью:

[WebMethod (MessageName = "GetServiceObject" Description = "Get ServiceObject from Server to Client")]
public MyObject GetServiceObject ()

КогдаЯ вызываю этот метод со стороны клиента. Я правильно заполняю объект и могу без проблем сериализовать объект, но результатом сериализации является следующий xml:

<? Xml version = "1.0" encoding = "utf-16"?>
<ServiceObject Xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Services Xmlns="http://enterpriseName/wsName">
 <service>
  <id>3</id>
  <date>02/08/2010</date>
 </service>
</Services>
</ServiceObject>

, который отличается от сгенерированного xmlот WebMethod GetServiceObjectXML.

Как я могу обойти это, поскольку я намерен использовать оба метода на одном и том же веб-сервисе и у одного и того же клиента?

1 Ответ

1 голос
/ 06 августа 2010

Очевидный ответ: исправить GetServiceObjectXML (), чтобы он возвращал тот же XML, что и GetServiceObject (). Разница, по-видимому, заключается в том, что объект, сериализованный платформой, имеет другое заданное пространство имен XML. Какой бы метод вы ни использовали для сериализации объекта в XML в GetServiceObjectXML (), этого не происходит.

...