Comment personnaliser WCF la sérialisation XML

Nous avons déjà SAVON interface de service web que nous voulons mettre en œuvre à l'aide de la WCF pour une nouvelle application. Cela semble bien fonctionner sauf pour un petit détail. L'espace de noms XML du type de retour d'une fonction doit être différente de l'espace de noms XML du service web lui-même. Et pour la vie de moi, je ne peux pas le faire fonctionner.

J'ai recréé le même problème avec un petit exemple de projet.
La WCF interface:

[XmlSerializerFormat]
[ServiceContract(Namespace = "urn:outer-namespace")]
public interface IService1
{
    [OperationContract]
    MyClass DoStuff(int value);
}

[Serializable]
public class MyClass
{
    [XmlElement(ElementName = "DataString")]
    public string MyString { get; set; }
}

Le service web de mise en œuvre:

    public class Service1 : IService1
{
    public MyClass DoStuff(int value)
    {
        return new MyClass { MyString = "Wooh!" };
    }
}

Une réponse de ce service web est alors sérialisé:
(Sans SAVON)

  <DoStuffResponse xmlns="urn:outer-namespace">
     <DoStuffResult>
        <DataString>Wooh!</DataString>
     </DoStuffResult>
  </DoStuffResponse>

Mais nous voulons que le <DoStuffResult> pour être xmlns="urn:intérieur de l'espace de noms".

J'ai essayé d'ajouter un [retour: XmlElement(...)] sur l'interface de la fonction ou du service web de la fonction, mais cela ne prend pas. Aussi un [XmlType] ou [XmlRoot] sur la définition de la classe MyClass ne fonctionne pas.

Quelqu'un a une idée de comment modifier le XML sérialisé espace de nom (ou nom de l'élément) de l'objet qui est la valeur de retour d'un service web WCF fonction?

OriginalL'auteur Jeroen-bart Engelen | 2009-03-16