2010-11-24 4 views
2

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.

Répondre

0

Vous ne pouvez pas faire cela. XML n'a pas de concept de générique, ni XML Schema ni SOAP. En ce qui concerne XML Schema, s'il a le même nom d'élément et le même espace de noms, alors c'est la même chose.

Vous ne pouvez pas avoir un service Web générique, les concepts n'existent pas.

Questions connexes