用户定义的XML序列化

时间:2009-10-02 06:42:42

标签: c# xml-serialization

我在C#中有以下结构:

[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...
}

通过序列化Drawing类,我得到一个描述如下行的xml:

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

是否有任何方法可以指定xml序列化标记,以便以这种格式生成Line:

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

1 个答案:

答案 0 :(得分: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
}

(为了简洁省略了Getters和Setters)