このサンプルコードは、クラスSampleのリストをシリアライズ(保存)し、またデシリアライズ(読み出し)する方法を示しています。このページでは保存した時のデータはバイナリで、ファイルを開いてもそのままでは視認できない状態です。ファイルを開いて確認したい場合はXML形式でのシリアライズすることも可能です。
クラスの宣言に対してSerializable属性をつけますが、実は保存したくないフィールドがある場合、それに対してNonSerializable属性をつけると保存されません。
また、プロパティを設定していても、プライベートなフィールドでもそれに対して直接シリアライズ、デシリアライズが行われるので、プロパティの中で計算処理があっても、実行されません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | 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.Runtime.Serialization.Formatters.Binary; using System.IO; namespace SerializationForClass { public partial class Form1 : Form { private List<sample> _data = new List<sample>(); private int _index; public Form1() { InitializeComponent(); } private void btnAdd_Click( object sender, EventArgs e) { Sample local = new Sample(); local.BirthDay = this .dateTimePicker1.Value; local.Name = this .textBox3.Text; local.ID = this ._data.Count; this ._data.Add(local); } private void btnNext_Click( object sender, EventArgs e) { _index++; if (_data.Count <= _index) { _index = _data.Count - 1; } this .textBox1.Text = _data[_index].ID.ToString(); this .textBox2.Text = _data[_index].Age.ToString(); this .textBox3.Text = _data[_index].Name; this .dateTimePicker1.Value = _data[_index].BirthDay; } private void btnPrev_Click( object sender, EventArgs e) { _index--; if (_index < 0) { _index = 0; } this .textBox1.Text = _data[_index].ID.ToString(); this .textBox2.Text = _data[_index].Age.ToString(); this .textBox3.Text = _data[_index].Name; this .dateTimePicker1.Value = _data[_index].BirthDay; } private void btnSave_Click( object sender, EventArgs e) { BinaryFormatter formatter = new BinaryFormatter(); Stream s = new FileStream( "D:\\Data.dat" , FileMode.Create, FileAccess.Write, FileShare.None); formatter.Serialize(s, _data); s.Close(); } private void btnLoad_Click( object sender, EventArgs e) { BinaryFormatter formatter = new BinaryFormatter(); Stream s = new FileStream( "D:\\Data.dat" , FileMode.Open, FileAccess.Read, FileShare.None); _data = (List<sample>)formatter.Deserialize(s); s.Close(); } } [Serializable] public class Sample { private string _name; [NonSerialized] private int _age; private DateTime _birthday; private int _id; public string Name { get { return _name; } set { _name = value; } } public int Age { get { return _age; } } public DateTime BirthDay { get { return _birthday; } set { _birthday = value; TimeSpan temp = DateTime.Today- this ._birthday; this ._age = ( int )(temp.Days / 365); } } public int ID { get { return _id; } set { _id = value; } } } } |