C# Tips-シリアライズとデシリアライズ
シリアライズとデシリアライズは割と使うけど、
よく忘れるので備忘録。
シリアライズメソッド
public static void Save<T>(T ob, string path) { XmlSerializer xs = new XmlSerializer(typeof(T)); using (StreamWriter sw = new StreamWriter(path, false, Encoding.UTF8)) { xs.Serialize(sw, ob); sw.Flush(); } }
Tを使うことでどんなクラスでも簡単にシリアライズできます。
デシリアライズメソッド
public static T Load<T>(string path) { if(!File.Exists(path)) { return default(T); } XmlSerializer xs = new XmlSerializer(typeof(T)); T result; XmlReaderSettings xrs = new XmlReaderSettings() { CheckCharacters = false, }; using (StreamReader sr = new StreamReader(path, Encoding.UTF8)) { using (XmlReader xr = XmlReader.Create(sr, xrs)) { result = (T)xs.Deserialize(xr); } } return result; }
こちらもTを使うことでどんなクラスでもデシリアライズできます。
staticクラスにする
これらをstaticクラスにすればとても使いやすいクラスになります。
public static class Serializer { public static void Save<T>(T ob, string path) { XmlSerializer xs = new XmlSerializer(typeof(T)); using (StreamWriter sw = new StreamWriter(path, false, Encoding.UTF8)) { xs.Serialize(sw, ob); sw.Flush(); } } public static T Load<T>(string path) { if(!File.Exists(path)) { return default(T); } XmlSerializer xs = new XmlSerializer(typeof(T)); T result; XmlReaderSettings xrs = new XmlReaderSettings() { CheckCharacters = false, }; using (StreamReader sr = new StreamReader(path, Encoding.UTF8)) { using (XmlReader xr = XmlReader.Create(sr, xrs)) { result = (T)xs.Deserialize(xr); } } return result; } }