2009-10-02 7 views
1

J'ai la structure suivante en C#:XML défini par l'utilisateur sérialisation

[Serializable] 
public struct Line 
    { 
     public Line(Point startPoint, Point endPoint) 
     { 
      StartPoint = startPoint; 
      EndPoint = endPoint; 
     } 
     public Point StartPoint; 
     public Point EndPoint; 
    } 

que je l'utilise dans une autre classe, qui est XmlSerializable

[XmlRootAttribute("Drawing")] 
public Drawing 
{ 
    [XmlElement("Line")] 
    List<Line> lines; 

    //other members... 
} 

En sérialisation la classe de dessin, je reçois un xml décrit une ligne comme ceci:

<Line> 
    <StartPoint> 
     <X>13</X> 
     <Y>33</Y> 
    </StartPoint> 
    <EndPoint> 
     <X>43</X> 
     <Y>63</Y> 
    </EndPoint> 
</Line> 

Existe-t-il un moyen de spécifier les étiquettes de sérialisation xml de sorte qu'un Li n'est généré dans ce format:

<Line StartPointX="13" StartPointY="33" EndPointX="43" EndPointY="63"/> 
+1

La sérialisation XML proposée ne serait- –

Répondre

2

Mettre [XmlAttribute] au-dessus de votre propriétés X et Y (non représentés dans votre exemple). Cela devrait les amener à sérialiser comme attributs au lieu d'éléments, et produira le code XML suivant:

<Line> 
    <StartPoint X="13" Y="33" /> 
    <EndPoint X="43" Y="63" /> 
</Line> 

Si vous êtes engagé à votre sortie exemple exactement comme spécifié, vous devrez également restructurer votre objet afin que votre X et Y sont nommés attributs correctement, comme ceci:

[Serializable] 
public struct Line 
{ 
    [XmlAttribute]   
    public int StartPointX 
    [XmlAttribute]   
    public int StartPointY 
    [XmlAttribute]   
    public int EndPointX 
    [XmlAttribute]   
    public int EndPointY 
} 

(accesseurs omis par souci de concision)

+1

valide ajouter que si vous essayez de répondre à un particulier schéma, vous pouvez utiliser xsd.exe pour créer des classes conformes à ce schéma. Voir: http://msdn.microsoft.com/en-us/library/x6c1kb0s(VS.71).aspx –

Questions connexes