2010-02-02 8 views
0

Remarque: Je ne peux pas utiliser XSD ... ne va pas aller dans pourquoi.Représenter XML sans xsd

Je vais avoir un problème qui représente correctement le code XML suivant dans une classe qu'il devrait se désérialisée dans:

XML:

<product> 
    <sku>oursku</sku> 
    <attribute name="attrib1">value1</attribute> 
    <attribute name="attrib2">value2</attribute> 
    <attribute name="attribx">valuex</attribute> 
</product> 

le problème représente les nœuds d'attributs

Ce que j'ai pour l'instant est:

[XmlElement(ElementName = "Attribute")] 
public Attribute[] productAttributes; 

public class Attribute 
{ 
    [XmlAttribute(AttributeName = "Name")] 
    public string attributeName; 

    public Attribute() 
    { 

    } 
} 

Je sais qu'il me manque quelque chose pour stocker la valeur, et peut-être

Répondre

2

Exécution xsd.exe deux fois sur votre XML pour créer un XSD intermédiaire, puis une classe C# de elle donne ce résultat:

[Serializable] 
[XmlType(AnonymousType=true)] 
[XmlRoot(Namespace="", IsNullable=false)] 
public partial class product 
{ 
    private string skuField; 
    private productAttribute[] attributeField; 

    [XmlElement(Form=XmlSchemaForm.Unqualified)] 
    public string sku { 
     get { 
      return this.skuField; 
     } 
     set { 
      this.skuField = value; 
     } 
    } 

    [XmlElement("attribute", Form=XmlSchemaForm.Unqualified, IsNullable=true)] 
    public productAttribute[] attribute { 
     get { 
      return this.attributeField; 
     } 
     set { 
      this.attributeField = value; 
     } 
    } 
} 

[Serializable] 
[XmlType(AnonymousType=true)] 
public partial class productAttribute { 

    private string nameField; 
    private string valueField; 

    [XmlAttribute] 
    public string name { 
     get { 
      return this.nameField; 
     } 
     set { 
      this.nameField = value; 
     } 
    } 

    [XmlText] 
    public string Value { 
     get { 
      return this.valueField; 
     } 
     set { 
      this.valueField = value; 
     } 
    } 
} 

Est-ce que ça marche pour toi??

+0

Oui, vous êtes un dieu. –

0

Le XML que vous essayez de produire ne ressemble pas à celui que XmlSerializer est capable de créer nativement. Je pense que vous allez devoir implémenter IXmlSerializable et l'écrire sur mesure.

0

Je pense que vous devez utiliser l'attribut [XmlText]:

public class Attribute 
{ 
    [XmlAttribute(AttributeName = "Name")] 
    public string attributeName; 

    [XmlText] 
    public string Value {get;set;} 

    public Attribute() 
    { 

    } 
} 
+0

Essayé, pas de dés. Je reçois une erreur "Erreur reflétant le type" –