C# でDictionary をXmlSerializer でシリアライズする
C# のDictionary は普通にやったのではXmlSerializer でシリアライズできないのですが、これを解決する方法はネット上でも色々と紹介されています。
そこをあえて今回自前で解決した方法が以下です。
using System; using System.Collections.Generic; using System.Text; using System.Xml.Serialization; namespace Program { public class Data { private Dictionary<string, int> table = new Dictionary<string, int>(); // シリアライズされないよう指定 [XmlIgnore] public Dictionary<string, int> Table { get { return table; } } // シリアライズ用にkey:value のペアをカンマ区切りで連結した文字列と相互に変換 public string TableAsString { get { // List<string> data = new List<string>(); foreach (string key in Table.Keys) { data.Add(String.Format("{0}:{1}", key, Table[key]); } return String.Join(",", data.ToArray()); } set { char[] separator = new char[]{':'}; Dictionary<string, int> dict = new Dictionary<string, int>(); foreach (string pair in value.Split(new char[]{','})) { string[] data = pair.Split(separator); dict[data[0]] = int.Parse(data[1]); } table = dict; } } } }
なんかもうちょっとDictionary を文字列化するのに一般的なやり方とかありそうな気もしますが、いったん文字列を介するというのがポイントです。