using System.Xml.Serialization; using System.Text; using System.Text.Encodings; namespace NWService { public class DicSerialize { /// /// シリアル化できる、KeyValuePairに代わる構造体 /// /// Keyの型 /// Valueの型 [Serializable] public struct KeyAndValue { public TKey Key; public TValue Value; public KeyAndValue(KeyValuePair pair) { Key = pair.Key; Value = pair.Value; } } /// /// DictionaryをKeyAndValueのListに変換する /// /// Dictionaryのキーの型 /// Dictionaryの値の型 /// 変換するDictionary /// 変換されたKeyAndValueのList public static List> ConvertDictionaryToList(Dictionary dic) { List> lst = new List>(); foreach (KeyValuePair pair in dic) { lst.Add(new KeyAndValue(pair)); } return lst; } /// /// KeyAndValueのListをDictionaryに変換する /// /// KeyAndValueのKeyの型 /// KeyAndValueのValueの型 /// 変換するKeyAndValueのList /// 変換されたDictionary public static Dictionary ConvertListToDictionary(List> lst) { Dictionary dic = new Dictionary(); foreach (KeyAndValue pair in lst) { dic.Add(pair.Key, pair.Value); } return dic; } /// /// DictionaryをXMLファイルに保存する /// /// Dictionaryのキーの型 /// Dictionaryの値の型 /// 保存先のXMLファイル名 /// 保存するDictionary public static void XmlSerialize(string fileName, Dictionary dic) { //シリアル化できる型に変換 List> obj = ConvertDictionaryToList(dic); //XMLファイルに保存 XmlSerializer serializer = new XmlSerializer(typeof(List>)); StreamWriter sw = new StreamWriter(fileName, false, new UTF8Encoding(false)); serializer.Serialize(sw, obj); sw.Close(); } /// /// シリアル化されたXMLファイルをDictionaryに復元する /// /// Dictionaryのキーの型 /// Dictionaryの値の型 /// 復元するXMLファイル名 /// 復元されたDictionary public static Dictionary XmlDeserialize( string fileName) { //XMLファイルから復元 XmlSerializer serializer = new XmlSerializer(typeof(List>)); StreamReader sr = new StreamReader(fileName, new UTF8Encoding(false)); List> obj = (List>)serializer.Deserialize(sr); sr.Close(); //Dictionaryに戻す Dictionary dic = ConvertListToDictionary(obj); return dic; } } }