JSON形式でのクラスのシリアライズ、デシリアライズはこちらの記事を参照してください。
XmlSerializerを利用してクラスのシリアライズ、デシリアライズをするコードを紹介します。
アプリケーションで設定内容を保存する処理を実装することがあります。アプリケーションの設定内容を保存する方法としてはiniファイルやレジストリ、XMLファイルに書き込むなどいくつかの保存方法があります。こちらの記事ではApplicationSettingsBaseクラスを用いた設定ファイルの保存を取り上げましたが、ApplicationSettingsBase
ではファイル保存場所を変えることができないなどの制約があります。今回はXmlSerializer
を利用することで、任意の場所に設定ファイルを保存できるようにします。
XmlSerializer
を利用する場合は設定を格納するクラスを定義し、そのクラスのメンバ変数に設定情報を代入しXmlSerializer
を用いて設定を格納したクラスをシリアライズしてファイルに書き出す仕組みとなります。
シリアライズは下記コードでクラスの内容をXMLファイルに書き出しています。
serializer.Serialize(fs, set);
一方、下記コードでXMLファイルを読み取りクラスのインスタンスを取得しています。
Setting set = (Setting)serializer.Deserialize(fs);
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml.Serialization;
using System.IO;
namespace XMLSerializer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Setting set = new Setting();
set.a = 100;
string fileName = "C:\\Develop\\aaa.config";
XmlSerializer serializer = new XmlSerializer(typeof(Setting));
FileStream fs = new FileStream(fileName, FileMode.Create);
serializer.Serialize(fs, set);
//
fs.Close();
}
private void button2_Click(object sender, EventArgs e)
{
string fileName = "C:\\Develop\\aaa.config";
XmlSerializer serializer = new XmlSerializer(typeof(Setting));
FileStream fs = new FileStream(fileName, FileMode.Open);
Setting set = (Setting)serializer.Deserialize(fs);
fs.Close();
textBox1.Text += Convert.ToString(set.a) + "\r\n";
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace XMLSerializer
{
public class Setting
{
public int a;
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml.Serialization;
using System.IO;
namespace XMLSerializer
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Setting set = new Setting();
set.a = 100;
set.acclist = new ACC[2];
set.acclist[0] = new ACC();
set.acclist[1] = new ACC();
set.acclist[0].name = "Penguin";
set.acclist[1].name = "Duck";
string fileName = "C:\\Develop\\aaa.config";
XmlSerializer serializer = new XmlSerializer(typeof(Setting));
FileStream fs = new FileStream(fileName, FileMode.Create);
serializer.Serialize(fs, set);
//
fs.Close();
}
private void button2_Click(object sender, EventArgs e)
{
string fileName = "C:\\Develop\\aaa.config";
XmlSerializer serializer = new XmlSerializer(typeof(Setting));
FileStream fs = new FileStream(fileName, FileMode.Open);
Setting set = (Setting)serializer.Deserialize(fs);
fs.Close();
textBox1.Text += Convert.ToString(set.a) + "\r\n";
for (int i = 0; i < set.acclist.Length; i++) {
textBox1.Text += set.acclist[i].name + "\r\n";
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace XMLSerializer
{
public class ACC
{
public string name;
}
public class Setting
{
public int a;
public ACC[] acclist;
}
}