Bonjour,
J'ai déjà utilisé l'attribut [XmlInclude(typeof(MyCustomType))] avec succes.
Mais aujourd'hui, je butte.
Mon dernier essais, simplifié au maximum, est celui-ci:
1) Un exemple qui fonctionne.
- nouvelle solution, nouveau projet de type Web service.
- J'ajoute une nouvelle classe, soit Class1.cs
- J'ajoute une seconde classe, soit Class2.cs qui dérive de Class1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 [Serializable] public class Class1 { public Class1() { } }
- Enfin, dans le web service, je crée une méthode qui retourne un objet de type Class1. Dans cette methode, il y a un 'cast' implicite de Class2 vers Class1. Pour disposer de la définition du type Class2 au niveau du client, il faut utiliser l'attribut [XmlInclude].
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 [Serializable] public class Class2 : Class1 { public Class2() { } }
- Je 'Build'
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 [WebMethod] [System.Xml.Serialization.XmlInclude(typeof(Class2))] public Class1 HelloWorld() { return new Class2(); }
- Je crée un nouveau projet de type console. J'y ajoute une web reference vers mon web service.
- Et hop, là, j'ai accès au type Class2.
2) Maintenant, la même chose, mais avec un DataSet ...
- Je crée simplement une classe DataSet2 qui dérive de DataSet.
- Je crée une méthode web qui retourne un objet de type DataSet. j'XmlInclude mon type dérivé DataSet2
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 [Serializable] public class DataSet2 : DataSet { public DataSet2() { } }
- Je build
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 [WebMethod] [System.Xml.Serialization.XmlInclude(typeof(DataSet2))] public DataSet HelloWorld2() { return new DataSet2(); }
- J' update ma web reference dans le projet console
- Et là, paf, pas de type DataSet2
Pourquoi?
Merci d'avance pour vos avis.
Partager