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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
[Serializable]
public class Class1
{
    public Class1() { }
}
- 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 Class2 : Class1
{
    public Class2() { }
}
- 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
6
[WebMethod]
[System.Xml.Serialization.XmlInclude(typeof(Class2))]
public Class1 HelloWorld()
{
    return new Class2();
}
- Je 'Build'
- 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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
[Serializable]
public class DataSet2 : DataSet
{
    public DataSet2() { }
}
- 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
6
[WebMethod]
[System.Xml.Serialization.XmlInclude(typeof(DataSet2))]
public DataSet HelloWorld2()
{
    return new DataSet2();
}
- Je build
- J' update ma web reference dans le projet console
- Et là, paf, pas de type DataSet2

Pourquoi?

Merci d'avance pour vos avis.