2010-11-24 3 views
2

Ich habe einen ASMX-Webservice mit einer Reihe von Methoden, die XML zurückgeben.Verwenden eines generischen Objekts, um Daten von einer Webservice-Methode zurückzugeben?

Der Dienst gibt verschiedene Objekte und ich habe ein Wrapper-Objekt erstellt, die Informationen über die Anforderung beispiel enthält:

[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; } 
} 

nun das funktioniert gut, bis ich meine zweite Methode mit einer anderen Art definiert. Dann bekomme ich diesen Fehler, wenn ich versuche, und laden Sie die ASMX Testseite

Die Top-XML-Element ‚Antwort‘ aus Namespace ‚http://tempuri.org/‘ Referenzen verschiedene Typen MyProject.Web.webservices. DtoWrapper 1[MyProject.BusinessLogic.ClassA] and MyProject.Web.webservices.DtoWrapper 1 [MyProject.BusinessLogic.ClassB]. Verwenden Sie XML-Attribute, um einen anderen XML-Namen oder -Namespace für das Element oder Typen anzugeben.

Ich habe meine Objekte versucht Markierung nach oben mit [XmlType(Namespace="com.temp.A")] und [XmlType(Namespace="com.temp.B")] aber es scheint nicht zu helfen.

Irgendwelche Ideen? Muss ich ein Wrapper-Objekt für jeden Typ erstellen, den ich verwenden möchte?

BEARBEITEN: Ich habe festgestellt, dass es nicht die Art Argumente ist, die das Problem sind. Es ist die Tatsache, dass das Tag [XmlRoot] in der Klasse angegeben ist. Der Serializer behandelt sie als 2 Typen, aber sie haben dasselbe Wurzelelement im selben Namespace.

Antwort

0

Sie können dies nicht tun. XML hat kein generisches Konzept, weder XML-Schema noch SOAP. Was das XML-Schema betrifft, wenn es denselben Elementnamen und denselben Namensraum hat, dann ist es dasselbe.

Sie können keinen generischen Webdienst haben, da die Konzepte nicht existieren.

Verwandte Themen