Пользовательская XML-сериализация - PullRequest
1 голос
/ 02 октября 2009

У меня есть следующая структура в 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 StartPointX="13" StartPointY="33" EndPointX="43" EndPointY="63"/>

1 Ответ

2 голосов
/ 02 октября 2009

Поставьте [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
}

(геттеры и сеттеры для краткости опущены)

...