2010-11-24 2 views
2

XMLを返すメソッドを持つASMX Webサービスがあります。ジェネリックオブジェクトを使用してWebサービスメソッドからデータを返しますか?

サービスは、様々な異なるオブジェクトを返し、私は、例えば、要求に関する情報が含まれているラッパー・オブジェクトを作成しました:

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

私は別のタイプで私の第二の方法を定義してまで、今、これが正常に動作します。私がしようとすると 参照の異なるタイプ MyProject.Web.webservices「http://tempuri.org/」名前空間からASMXテストページ

トップXML要素の応答 'をロードするときそして、私はこのエラーを取得します。 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スキーマに関する限り、要素名と名前空間が同じであれば、同じことになります。

概念が存在しないため、汎用Webサービスを使用することはできません。

関連する問題