2009-10-16 9 views
3

Je travaille sur un projet qui appelle un service Web en utilisant WSE3. Les types générés à l'origine à l'aide de VS2005 ont été modifiés au fil du temps. Maintenant, j'ai besoin de changer le nom du type dans le message SOAP. Je suppose que cela devrait être fait en utilisant XmlTypeAttribute, mais cela n'affecte pas le nom du type. En tant qu'expérience, j'ai utilisé XmlElementAttribute sur une propriété de cette classe et cela a changé le nom de l'élément généré pour cette propriété. L'objet généré a été étendu à l'aide de classes partielles.XmlTypeAttribute ne change pas le nom du type

Le type SOAP vient à travers le fil en tant qu '"adresse". Je ne suis pas sûr pourquoi XmlTypeAttribute ne l'affecte pas, ou pourquoi il arrive en minuscules.

Réflexions sur ce que je pourrais faire de mal, ou une meilleure façon d'atteindre l'objectif?

References.cs:

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.1434")] 
[System.SerializableAttribute()] 
[System.ComponentModel.DesignerCategoryAttribute("code")] 
[System.Xml.Serialization.XmlTypeAttribute(TypeName = "MyAddress", Namespace = "http://sample.com/transaction")] 
//              ^-- Soap typenamed "address", not "MyAddress" 
public partial class Address 
{   
    private string address1Field; 

    private string address2Field; 

    private string[] jurisdictionsField; 

    private System.DateTime resolvedDateField; 

    private bool resolvedDateFieldSpecified; 

    /// <remarks/> 
    [System.Xml.Serialization.XmlElementAttribute("MyAddress1", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    //            ^--- SOAP element named "MyAddress1" as expected 
    public virtual string Address1 
    { 
     get { 
      return this.address1Field; 
     } 
     set { 
      this.address1Field = value; 
     } 
    } 

    /// <remarks/> 
    [System.Xml.Serialization.XmlElementAttribute("address2", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)] 
    public virtual string Address2 
    { 
     get { 
      return this.address2Field; 
     } 
     set { 
      this.address2Field = value; 
     } 
    }   
} 

Address.cs:

public partial class Address 
{ 
    private int id; 

    public virtual int Id 
    { 
     get { return id; } 
     set { id = value; } 
    } 
} 

Répondre

3

[XmlType] change le nom du complexType dans le schéma. Il ne modifie pas les noms d'éléments dans le fichier XML.

Utilisez plutôt [XmlElement(Name="MyAddress", Namespace="your namespace")].

+0

Pour une méthode plus compliquée, voir l'exemple inclus dans la documentation MSDN pour [XmlAttributes.XmlType Property] (https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlattributes.xmltype (v = vs.100) .asp). - "En créant un objet XmlTypeAttribute, en lui affectant la propriété XmlType et en créant un objet XmlAttributeOverrides, vous pouvez modifier le nom de l'élément XML." –

Questions connexes