2012-02-10 15 views
1

私はXMLファイルがあります。XMLシリアル化

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

を私はこのケース内のオブジェクトへのXMLをデシリアライズする方法

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

クラスを定義しますか?ハンドオブジェクトの結果はカード= {C5、SQ、DQ、H8、C9、H7、S9、D5、DA、CJ、S6、HK、D4}でなければなりません。

+0

MSDNの基本については簡単な出発点です。http://msdn.microsoft.com/en-us/library/182eeyhh(v=vs.100).aspx – Lloyd

+1

カスタムシリアル化を行う必要があります。 http://stackoverflow.com/q/1075860/24047を参照してください。 – bang

答えて

5

できません。あなたは何ができるか

は、そのゲッター/セッターあなたがIXmlSerializableの助けを借りてこれを行うことができます

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

[XmlAttribute("cards")] 
public string Cards { 
    get { return String.Join(",", CardList); } 
    set { CardList = value.Split(",").ToList(); } 
} 
2

で、この変換を行いますプロパティを作成することです。詳しくは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>())); 
    } 
} 

が、これはあなたのお役に立てば幸いです。

+1

FYI '[Serializable]'はXMLシリアライザでは使用されていません。 –

+0

@ JohnSaunders、右、バイナリシリアル化に使用されます。それはOPのコードにあった。 –