2010-11-24 2 views
2

У меня есть веб-сервис ASMX с рядом методов, которые возвратят XML.Использование общего объекта для возврата данных из метода webservice?

Служба возвращает различные различные объекты, и я создал объект-оболочку, которая содержит информацию о запросе: например

[Serializable] 
[XmlRoot("response")] 
public class DtoWrapper<T> 
{ 
    [XmlElement("error")] 
    public bool Error { get; set; } 

    [XmlElement("error_message")] 
    public string ErrorMessage { get; set; } 

    [XmlElement("success")] 
    public bool Success { get; set; } 

    [XmlElement("friendly_message")] 
    public string FriendlyMessage { get; set; } 

    [XmlArray("result")] 
    [XmlArrayItem("item")] 
    public List<T> Payload { get; set; } 
} 

Теперь это работает отлично, пока я не определен мой второй метод с другим типом. Тогда я получаю эту ошибку, когда я пытаюсь загрузить тестовую страницу ASMX

Верхний элемент «» ответ XML из пространства имен «http://tempuri.org/» ссылок различных типов MyProject.Web.webservices. DtoWrapper 1[MyProject.BusinessLogic.ClassA] and MyProject.Web.webservices.DtoWrapper 1 [MyProject.BusinessLogic.ClassB]. Используйте атрибуты XML для указания другого XML-имя или пространство имен для элемента или типов.

Я попытался маркировки моих объектов с [XmlType(Namespace="com.temp.A")] и [XmlType(Namespace="com.temp.B")], но это, кажется, не поможет.

Любые идеи? Должен ли я создать объект-оболочку для каждого типа, который я хочу использовать?

EDIT: Я понял, что это не те аргументы типа, которые являются проблемой. Это факт, что тег [XmlRoot] указан в классе. Сериализатор рассматривает их как 2 типа, но они имеют один и тот же корневой элемент в одном и том же пространстве имен.

ответ

0

Вы не можете этого сделать. XML не имеет понятия дженериков, ни XML-схемы, ни SOAP. Что касается XML-схемы, если у нее есть одно и то же имя элемента и одно и то же пространство имен, то это то же самое.

У вас не может быть общего веб-сервиса, поскольку понятия не существуют.

Смежные вопросы