【C#】【XML】C# でXMLシリアライズ・デシリアライズ ~ XmlSerializerクラス ~

    ■ はじめに

 C#XMLシリアライズ・デシリアライズを
XmlSerializerクラスを使って行う

    後日談

 * .NET3.0以上であれば、DataContractSerializerクラスを使った方がいい
  => 詳細は、以下の関連記事を参照のこと。
https://dk521123.hatenablog.com/entry/37973448

 

    ■ XMLシリアライズ

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    [XmlIgnoreAttribute] // シリアル化しないようにする
    public string Sex { get; set; }
    [XmlElement("国")] // 要素名を変更する
    public string Country { get; set; }
}
BindingList<Person> list = new BindingList<Person>();

private void button1_Click(object sender, EventArgs e)
{
    Person person = new Person();
    person.Name = this.textBox1.Text;
    person.Age = Int32.Parse(this.textBox2.Text);
    person.Sex = this.comboBox1.Text;
    person.Country = this.textBox3.Text;

    this.list.Add(person);

    this.OutputObjectIntoXml(this.list, @"C:\test.xml");
}

private void OutputObjectIntoXml<T>(T t,string path)
{
    XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));

    using (FileStream fs = new FileStream(path, FileMode.Create))
    {
        xmlSerializer.Serialize(fs, t);
    }
}

 

    ■ XMLシリアライズ

private void button2_Click(object sender, EventArgs e)
{
    this.list = this.InputObjectFromXml<BindingList<Person>>(@"C:\test.xml");
    this.dataGridView1.DataSource = this.list;
}

private T InputObjectFromXml<T>(string path)
{
    XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
    T returnVal;

    using (FileStream fs = new FileStream(path, FileMode.Open))
    {
        returnVal = (T)xmlSerializer.Deserialize(fs);
    }

    return returnVal;
}

 

    関連記事

    XML関連

C#XMLファイルを扱うには ~ 入門編 ~
https://dk521123.hatenablog.com/entry/32868509
C#XMLシリアライズ・デシリアライズ ~ DataContractSerializerクラス ~
https://dk521123.hatenablog.com/entry/37973448
XML Serializeで、xmlnsなどの余計なタグを削除する
https://dk521123.hatenablog.com/entry/24459035