| ■No83223 (Hongliang さん) に返信
> XmlSerializerは、getとset両方を持つpublicプロパティ(とpublicフィールド)のみをシリアライズ/デシリアライズの対象とします。
> ルートオブジェクトはLinkedList型ですが、このLinkedListクラスには上記に該当するものが存在していません。
>
> 直接LinkedList型をシリアライズ/デシリアライズするのではなく、
> ・シリアライズ用の、stringとintをプロパティに持つクラス Hoge を作る
> ・シリアライズするときは、List<Hoge>に一旦コピーしそれをシリアライズする
> ・デシリアライズするときは、List<Hoge>にデシリアライズし、それを元にLinkedListを再構築する
> というような手順を取るのはいかがでしょうか。
>
ありがとうございます。早速その手法でやってみたのですが、型名が変わっただけでほぼ同じ状況です。
なにが間違っているのでしょうか…まずはシリアル化する方のみ掲載します
//変更後のメソッド内
List<Hoge> clist1 = new List<Hoge>();
LinkedList.Node n = list1.First;
Hoge hoge1 = new Hoge();
while(n==list1.Last.Next)
{
hoge1.name = n.Value;
hoge1.num = n.Num;
clist1.Add(hoge1);
n = n.Next;
}
System.Xml.Serialization.XmlSerializer serializer1 =
new System.Xml.Serialization.XmlSerializer(typeof(List<Hoge>));
System.IO.StreamWriter sw1 = new System.IO.StreamWriter(
"App1.config", false, new UTF8Encoding(false));
serializer1.Serialize(sw1, clist1);
sw1.Close();
List<Hoge> clist2 = new List<Hoge>();
LinkedList.Node m = list1.First;
Hoge hoge2 = new Hoge();
while (n == list1.Last.Next)
{
hoge2.name = n.Value;
hoge2.num = n.Num;
clist1.Add(hoge2);
n = n.Next;
}
System.Xml.Serialization.XmlSerializer serializer2 =
new System.Xml.Serialization.XmlSerializer(typeof(List<Hoge>));
System.IO.StreamWriter sw2 = new System.IO.StreamWriter(
"App2.config", false, new UTF8Encoding(false));
serializer2.Serialize(sw2, clist2);
sw2.Close();
//おっしゃっていたクラスHoge
public class Hoge
{
public string name;
public int num;
}
> // なお、LinkedList自体はSystem.Collections.Genericに標準ライブラリとして用意されています。
こちらが解決したらそちらの方でもできるようにする予定です。 |