Сериализация XML на пользовательских данных - PullRequest
1 голос
/ 10 февраля 2012

У меня есть XML-файл:

<Hand cards="C5,SQ,DQ,H8,C9,H7,S9,D5,DA,CJ,S6,HK,D4">
</Hand>

Я определяю класс

[Serializable()]
[XmlRoot("Hand")]
public class Hand
{
    [XmlAttribute("cards")]
    public List<string> Cards{get;set;}
}

Как десериализовать XML для объекта в этом случае? Результат ручного объекта должен иметь карты = {C5, SQ, DQ, H8, C9, H7, S9, D5, DA, CJ, S6, HK, D4}.

Ответы [ 2 ]

5 голосов
/ 10 февраля 2012

Вы не можете.

Что вы можете сделать, это создать свойство, которое будет выполнять это преобразование в своем методе получения / установки

[XmlIgnore]
public List<string> CardList { get; private set; }

[XmlAttribute("cards")]
public string Cards {
   get { return String.Join(",", CardList); }
   set { CardList = value.Split(",").ToList(); }
}
2 голосов
/ 10 февраля 2012

Вы можете сделать это с помощью IXmlSerializable.Узнайте больше об этом на MSDN .

Таким образом

[Serializable()]
[XmlRoot("Hand")]
public class Hand : IXmlSerializable {
    [XmlAttribute("cards")]
    public List<string> Cards { get; set; }

    public System.Xml.Schema.XmlSchema GetSchema() { return null; }

    public void ReadXml(XmlReader reader) {
        this.Cards = new List<string>(reader.GetAttribute("cards").Split(','));
    }

    public void WriteXml(XmlWriter writer) {
        writer.WriteAttributeString("cards", 
             string.Join(",", 
                this.Cards != null ? this.Cards : new List<string>()));
    }
}

Надеюсь, это вам поможет.

...