Как заставить XmlSerializer сериализовать элементы как атрибуты скомпилированного типа?

мы дали некоторый предопределенный XML, похожий на этот:



   
      
      
      
   
   

И моя цель состоит в том, чтобы десериализовать его вList используяXmlSerializer экземпляр и наоборот. Следовательно, я'мы определили тип как следующий:

[Serializable]
[XmlRoot("Root")]
public class RootClass
{
   public List Points { get; set; }
   /* and more properties */
}

Моя проблема в том, чтоXmlSerializer интерпретирует свойства фреймворка какXmlElement, Для этого они только читаются и пишутся как таковые, но не как требуемые атрибуты.

Одним из решений, о котором я думал, было определение пользовательского типа точки, который определяетXmlAttribtueAttribute для каждого свойства координат. И эта пользовательская точка отображается наSystem.Windows.Point состав. Это выглядело следующим образом:

[XmlIgnore]
public List Points { get; set; }

[XmlArray("Points")]
[XmlArrayItem("Point")]
public List CustomSerializedPoints
{
    get { return this.Points.ToCustomSerializedPointList(); }
    set { this.Points = value.ToPointList(); }
}

Но для этого решения ямы заметили, что сеттер никогда не вызывается, аXmlSerializer вызывает добытчикCustomSerializedPoints около пяти раз. Предполагается, что существует вспомогательный список, который содержит одну и ту же ссылку на каждый вызов и который никогда не является нулевым. Для этих требований это не решение для меня, потому что мне нужно было бы сохранитьList в памяти только для записи точек, используя атрибуты вместо элементов.

Так есть ли у кого-нибудь более практичное решение?

Дополнительно мойXmlSerializer код:

/* ... */
var serializer = new XmlSerializer(typeof(RootClass));
TextReader textReader = new StreamReader("file.xml");
(RootClass)serializer.Deserialize(textReader);
/* ... */

Ответы на вопрос(1)

Ваш ответ на вопрос