J'ai un webservice ASMX avec un certain nombre de méthodes qui retourneront XML.Utilisation d'un objet générique pour renvoyer des données à partir d'une méthode de service Web?
Le service retourne divers objets différents et je l'ai créé un objet enveloppe qui contient des informations sur la demande par exemple:
[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; }
}
Maintenant, cela fonctionne bien jusqu'à ce que je définissais ma deuxième méthode avec un autre type. Puis-je obtenir cette erreur quand je tente de charger la page de test ASMX
L'élément XML top 'réponse' de namespace 'http://tempuri.org/' références types distincts MyProject.Web.webservices. DtoWrapper
1[MyProject.BusinessLogic.ClassA] and MyProject.Web.webservices.DtoWrapper
1 [MyProject.BusinessLogic.ClassB]. Utilisez les attributs XML pour spécifier un autre nom XML ou espace de noms pour l'élément ou des types.
J'ai essayé marquer mes objets avec [XmlType(Namespace="com.temp.A")]
et [XmlType(Namespace="com.temp.B")]
mais il ne semble pas aider.
Des idées? Devrai-je créer un objet wrapper pour chaque type que je veux utiliser?
EDIT: J'ai réalisé que ce n'était pas vraiment les arguments de type qui posent problème. C'est le fait que la balise [XmlRoot] est spécifiée dans la classe. Le sérialiseur les traite comme 2 types mais ils ont le même élément racine dans le même espace de noms.