タイプ のオブジェクトを含むリストを xml にシリアル化する必要がありますPair<T,U>
。これらの値に加えて、そのジェネリックの型 ( と の型) もシリアル化する必要がありT
ますU
。
まず、ペアのリストを保持するクラス PairList を作成し、次にキーと値の 2 つの値のペアを表す実際のクラスを作成しました。
[XmlRoot("pairList")]
public class PairList<T,U>{
[XmlElement("element")]
public List<Pair<T,U>> list;
public PairList()
{
list = new List<Pair<T, U>>();
}
}
public class Pair<T, U>
{
[XmlAttribute("key")]
public T key;
[XmlAttribute("value")]
public U value;
[XmlAttribute("T-Type")]
public Type ttype;
[XmlAttribute("U-Type")]
public Type utype;
public Pair()
{
}
public Pair(T t, U u)
{
key = t;
value = u;
ttype = typeof(T);
utype = typeof(U);
}
}
次に、シリアル化してみました。
PairList<string,int> myList = new PairList<string,int>();
myList.list.Add(new Pair<string, int>("c", 2));
myList.list.Add(new Pair<string, int>("c", 2));
myList.list.Add(new Pair<string, int>("c", 2));
myList.list.Add(new Pair<string, int>("c", 2));
try
{
XmlSerializer serializer = new XmlSerializer(typeof(PairList<string, int>));
TextWriter tw = new StreamWriter("list.xml");
serializer.Serialize(tw, myList);
tw.Close();
}
catch (Exception xe)
{
MessageBox.Show(xe.Message);
}
残念ながら、例外が発生しています: There was an error reflecting type: PairList[System.String,System.Int32]
。この例外を回避してクラスをシリアル化する方法についてのアイデアは大歓迎です。
ttype
フィールドとフィールドをシリアル化しないことを選択した場合utype
(保護またはプライベートにすることにより)、シリアル化は機能します。Type
フィールドをシリアライズしたくない理由がわかりません。