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;
}
}
}