C# シリアライズとでシリアライズ
オブジェクトのディープコピーに用いたりする。
シリアライズ
/// <summary> /// シリアライズを行います。 /// <typeparam name="T">オブジェクトのタイプ </typeparam> /// <param name="filePath">ファイルパス</param> /// <returns> /// 対象ファイルから復元したデータ /// </returns> public static void Serializea<T>(string filePath, T source) { bool isSuccess = false; try { XmlSerializer serializer = new XmlSerializer(source.GetTpype()); using (StreamWriter sw = new StreamWriter(filePath)) { Serializer.Serialize(sw, source); } isSuccess = true; } catch (Exception ex) { // エラー処理 } return isSuccess ; }
デシリアライズ
/// <summary> /// デシリアライズを行います。 /// </summary> /// <typeparam name="T">オブジェクトのタイプ </typeparam> /// <param name="filePath">ファイルパス</param> /// <returns> /// 対象ファイルから復元したデータ /// </returns> public static bool T Deserialize<T>(string filePath,ref T source) { bool isSuccess = false; try { XmlSerializer serializer = new XmlSerializer(source.GetTpype()); using (StreamReader sr = new StreamReader(filePath)) { source = (T)Serializer.Deserialize(sr); } isSuccess = true; } catch (Exception ex) { // エラー処理 } return isSuccess ; }
シリアライズ対象のオブジェクト
属性を付与してシリアライズできるようにする。
[System.Xml.Serialization.XmlRootAttribute("Company")] public class Company { [System.Xml.Serialization.XmlAttributeAttribute("CompanyName")] public String CompanyName = String.Empty; [System.Xml.Serialization.XmlElementAttribute("Customer")] public List<Customer> Customers = null; public class Customer { [System.Xml.Serialization.XmlElementAttribute("Name")] public String Name = String.Empty; [System.Xml.Serialization.XmlElementAttribute("Job")] public String Job = String.Empty; } } [XmlRootAttribute("ActionUISetup")] public class ActionUISetup { [XmlArrayAttribute("menulists")] [XmlArrayItemAttribute("menulist")] public MenuListSetup[] MenuLists; } public class MenuListSetup { [XmlAttribute("name")] public string Name; [XmlArrayAttribute("items")] [XmlArrayItemAttribute("item")] public MenuItemSetup[] Items; } public class MenuItemSetup { [XmlElementAttribute("text")] public string Text; [XmlElementAttribute("action")] public string Action; }