У меня есть веб-сервис ASMX с несколькими методами, которые будут возвращать XML.
Сервис возвращает различные объекты, и я создал объект-обертку, который содержит информацию о запросе, например:
[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 'response' из пространства имен '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 типа, но они имеют одинаковый корневой элемент в одном и том же пространстве имен.