2009-10-02 67 views
1

我已經在C#中的結構如下:用戶自定義XML序列化

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

我在另一個課堂上使用,也就是XmlSerializable

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

    //other members... 
} 

通過序列化繪圖類,我得到的XML描述這樣的一條線:

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

是否有任何指定xml序列化標記的方法,以便Li ne以這種格式生成:

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

提出的序列化是無效的XML – 2009-10-02 21:36:56

回答

2

[XmlAttribute]放在您的X和Y屬性之上(在您的示例中未顯示)。這應該使他們序列化爲屬性,而不是元素,會產生以下XML:

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

如果您正在爲您指定致力於爲您的示例輸出完全相同,你也必須調整你的對象,這樣你X和Y屬性都是正確的,就像這樣:

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

(getter和setter不再贅述)

+1

只想補充一點,如果你想以滿足特定模式,您可以使用xsd.exe創建符合該模式的類。請參閱:http://msdn.microsoft.com/en-us/library/x6c1kb0s(VS.71).aspx – 2009-10-02 06:56:50