//SMMクラス public class SMM{//ArrayListに入れるクラス public string SMCD = "0"; public string Name = "A"; public SMM(){
} }
//DBDクラス public class DBD{ public ArrayList AL = new ArrayList(); public DBD(){ SMM SM = new SMM(); AL.add(SM); } public string GetSte(int i){//ArrayListからクラスを取り出す SMM SM = new SMM(); SM = (SMM)AL[i]; ***************エラー場所*************** return SM.SMCD; } }
//Form1中 private DBD DB = new DBD();
public void In(){//シリアライズ System.IO.FileStream FileName = new System.IO.FileStream("Syouhin.xml",System.IO.FileMode.OpenOrCreate); Type[] et = new Type[] {typeof(SMM)}; System.Xml.Serialization.XmlSerializer serialize_1; serialize_1 = new System.Xml.Serialization.XmlSerializer( typeof(DBD),et); ystem.IO.StreamWriter writes1 = new System.IO.StreamWriter(FileName); serialize_1.Serialize(writes1,DB); FileName.Close(); }
public void Out(){//デシリアライズ System.IO.FileStream FileName = new System.IO.FileStream("Syouhin.xml",System.IO.FileMode.OpenOrCreate); Type[] et = new Type[] {typeof(SMM)}; System.Xml.Serialization.XmlSerializer serialize_2; serialize_2 = new System.Xml.Serialization.XmlSerializer(typeof(DBD),et); System.IO.StreamReader Reader2 = new System.IO.StreamReader(FileName); DB.AL.Add(serialize_2.Deserialize(Reader2)); FileName.Close(); }
public void GetDate(){//データの取り出し MessageBox.Show(DB.GetSte(0)); }
分類:[.NET]
いつもお世話になります。
ArrayListにクラスを入れてXML化(シリアライズ)をしました。
そこまでは成功しましたが、その後のデシリアライズに失敗してしまいました。
何かを忘れているのだとは思いますが、どうしても分かりません。
シリアライズしたデータも普通に出来ていました。
デシリアライズもできますが、ArrayListから1つのクラスを取り出す時に
「キャストが有効ではありません」とでます。
下のコードにエラー場所を書いています。
キャストの方法が違う?のかと思いますが、
どうかよければ教えて頂けないでしょうか。
Form1がDBDクラスを持ち、
DBDクラスがArrayListを持ち、
ArrayListの中にSMMクラスを入れて行く形になります。
使用クラス、シリアライズ、デシリアライズ、データの抽出に使う部分の
コードをおきます。
//SMMクラス
public class SMM{//ArrayListに入れるクラス
public string SMCD = "0";
public string Name = "A";
public SMM(){
}
}
//DBDクラス
public class DBD{
public ArrayList AL = new ArrayList();
public DBD(){
SMM SM = new SMM();
AL.add(SM);
}
public string GetSte(int i){//ArrayListからクラスを取り出す
SMM SM = new SMM();
SM = (SMM)AL[i]; ***************エラー場所***************
return SM.SMCD;
}
}
//Form1中
private DBD DB = new DBD();
public void In(){//シリアライズ
System.IO.FileStream FileName = new System.IO.FileStream("Syouhin.xml",System.IO.FileMode.OpenOrCreate);
Type[] et = new Type[] {typeof(SMM)};
System.Xml.Serialization.XmlSerializer serialize_1;
serialize_1 = new System.Xml.Serialization.XmlSerializer(
typeof(DBD),et);
ystem.IO.StreamWriter writes1 = new System.IO.StreamWriter(FileName);
serialize_1.Serialize(writes1,DB);
FileName.Close();
}
public void Out(){//デシリアライズ
System.IO.FileStream FileName = new System.IO.FileStream("Syouhin.xml",System.IO.FileMode.OpenOrCreate);
Type[] et = new Type[] {typeof(SMM)};
System.Xml.Serialization.XmlSerializer serialize_2;
serialize_2 = new System.Xml.Serialization.XmlSerializer(typeof(DBD),et);
System.IO.StreamReader Reader2 = new System.IO.StreamReader(FileName);
DB.AL.Add(serialize_2.Deserialize(Reader2));
FileName.Close();
}
public void GetDate(){//データの取り出し
MessageBox.Show(DB.GetSte(0));
}