- 題名: XMLの逆シリアルかについて
- 日時: 2008/07/18 22:53:47
- ID: 22466
- この記事の返信元:
- (なし)
- この記事への返信:
- [22467] Re[1]: XMLの逆シリアルかについて2008/07/18 23:59:50
- ツリーを表示
すみません…何を書けばいいのかわかりませんでした。
//XMLファイルに保存するオブジェクトのためのクラス
public class Data
{
public decimal YEAR1;
public decimal MONTH1;
public decimal DAY1;
public string HOUR1;
public string MINUTE1;
public decimal YEAR2;
public decimal MONTH2;
public decimal DAY2;
public string HOUR2;
public string MINUTE2;
public string ACT;
public string PLACE;
public string MEMO;
}
public Insert()
{
InitializeComponent();
}
private void Insert_Load(object sender, EventArgs e)
{
}
/*追加ボタンを押したとき*/
private void button1_Click(object sender, EventArgs e)
{
//保存先のファイル名
string fileName = @"C:\data\" + year1.Value + "_" + month1.Value + "_" + day1.Value + ".xml";
//保存するクラス(SampleClass)のインスタンスを作成
Data d = new Data();
d.YEAR1 = year1.Value;
d.MONTH1 = month1.Value;
d.DAY1 = day1.Value;
d.HOUR1 = hour1.Text;
d.MINUTE1 = minute1.Text;
d.YEAR2 = year2.Value;
d.MONTH2 = month2.Value;
d.DAY2 = day2.Value;
d.HOUR2 = hour2.Text;
d.MINUTE2 = minute2.Text;
d.ACT = Act.Text;
d.PLACE = place.Text;
d.MEMO = memo.Text;
//XmlSerializerオブジェクトを作成
//書き込むオブジェクトの型を指定する
System.Xml.Serialization.XmlSerializer serializer =new System.Xml.Serialization.XmlSerializer(typeof(Data));
//ファイルを開く
System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Create);
//シリアル化し、XMLファイルに保存する
serializer.Serialize(fs, d);
//閉じる
fs.Close();
}
という風にシリアルかしています。
今が実験環境にいないためコンパイルできないので、エラーメッセージがかけません…すみません…
ただ、(2,2)という風になっていたのを覚えています。
またなのですが、よろしくお願いします。
複数のデータを格納してデータを表示させようとしました。
public class Data
{
public decimal YEAR1;
public decimal MONTH1;
public decimal DAY1;
public string HOUR1;
public string MINUTE1;
public decimal YEAR2;
public decimal MONTH2;
public decimal DAY2;
public string HOUR2;
public string MINUTE2;
public string ACT;
public string PLACE;
public string MEMO;
public Data()
{
}
public Data(decimal YEAR1, decimal MONTH1, decimal DAY1, string HOUR1, string MINUTE1, decimal YEAR2, decimal MONTH2, decimal DAY2, string HOUR2, string MINUTE2, string ACT, string PLACE, string MEMO)
{
this.YEAR1 = YEAR1;
this.MONTH1 = MONTH1;
this.DAY1 = DAY1;
this.HOUR1 = HOUR1;
this.MINUTE1 = MINUTE1;
this.YEAR2 = YEAR2;
this.MONTH2 = MONTH2;
this.DAY2 = DAY2;
this.ACT = ACT;
this.PLACE = PLACE;
this.MEMO = MEMO;
}
}
に格納していて、
listBox1.Items.Clear();
Data[] data = new Data[10];
//保存元のファイル名
string fileName = @"C:\data\" + year + "_" + month + "_" + day + ".xml";
System.IO.FileInfo fInfo = new System.IO.FileInfo(fileName);
if (fInfo.Exists)
{
//保存した内容を復元する
System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(Data[]));
System.IO.FileStream fs = new System.IO.FileStream(fileName,System.IO.FileMode.Open);
data = (Data[])serializer.Deserialize(fs);//←ここでエラー
//復元した内容を表示する
foreach(Data file in data)
{
listBox1.Items.Add(file.HOUR1 + ":" + file.MINUTE1 + "〜" + file.HOUR2 + ":" + file.MINUTE2 + " " + file.ACT);
}
fs.Close();
}
else
{
listBox1.Items.Add("norhing...");
}
で表示させようとしました。
InvaildOperationExceptionはハンドルされませんでした。XML ドキュメント (2,2) でエラーが発生しました。
とデバッグに引っかかります。
データ挿入時には、
//XMLファイルに保存するオブジェクトのためのクラス
public class Schedule
{
public Data Data;
public Schedule()
{
}
public Schedule(Data Data)
{
this.Data = Data;
}
}
というクラスも使っています。
またなのですが、わかりません…
よろしくお願いします。
分類:[.NET]
public class DATA { public int YEAR1; public int MONTH1; public int DAY1; public int YEAR2; public int MONTH2; public int DAY2; public int HOUR1; public int MINUTE1; public int HOUR2; public int MINUTE2; public string ACT; public string PLACE; public string MEMO; } としていて、 //保存元のファイル名 string fileName = @"C:\data\" + year + "_" + month + "_" + label2.Text + ".xml"; if (fileName.Length > 0) { try { //XmlSerializerオブジェクトの作成 XmlSerializer serializer = new XmlSerializer(typeof(DATA)); //ファイルを開く FileStream fs = new FileStream(fileName, FileMode.Open); //XMLファイルから読み込み、逆シリアル化する DATA file = (DATA)serializer.Deserialize(fs); //閉じる fs.Close(); } catch (FileNotFoundException d) { Console.WriteLine(d.FileName + "is not found!"); } } else { Console.WriteLine("EROOR"); } このようにして逆シリアルかを行おうとしました。 上のほうにあるDATAクラスのの形でXMLファイルにデータ保存しています。 だいぶ省いていますが、この部分が重要だと思うところのみを載せます。 DATA file = (DATA)serializer.Deserialize(fs); の部分で、InvalidOperationExceptionはハンドルされませんでした。 とデバッガに引っかかってしまいます。 どなたかご存知の方がいましたらよろしくお願いします。