PDA

View Full Version : ذخیره لیستی یک کلاس در فایل xml



PetekDincos
سه شنبه 03 مرداد 1391, 00:00 صبح
با سلام
دوستان من می خوام لیستی از یه کلاس رو در یه فایل xml ذخیره کنم و بعد بخونم
مثلا کلاس MyClass که به صورت زیر می باشد رو به صورت یه لیست ازش دارم و می خوام در فایل xml ذخیره کنم و از فایل xml همون لیست رو بتونم بازیابی کنم ممنون می شم راهنماییم کنید با تشکر


public Class MyClass
{
public int ID{get;set;}
public string Name{get;set}
}

hakim22
سه شنبه 03 مرداد 1391, 10:24 صبح
اول باید به کلاست قابلیت serialize رو اضافه کنی

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;

namespace WindowsFormsApplication1
{
[XmlRootAttribute]
class user
{
[XmlElementAttribute]
public string UserName;
[XmlElementAttribute]
public string password;

}
}



بعد دوتا دکمه بزار روی یک فرم و اینجوری کد بزن :


private void SaveXmlButton_Click(object sender, EventArgs e)
{
user user1=new user();
user1.UserName="Admin";
user1.password="123";
XmlSerializer sr = new XmlSerializer(typeof(user));
TextWriter tr =new StreamWriter("d:\\user1.xml");
sr.Serialize(tr,user1);
tr.Close();



}

private void ReadXML_Click(object sender, EventArgs e)
{
user user2 = new user();
XmlSerializer sr = new XmlSerializer(typeof(user));
TextReader tr = new StreamReader("d:\\user1.xml");

user2 = (user)sr.Deserialize(tr);

MessageBox.Show(user2.UserName);

}


فقط یادت باشه که این رو به بالای فرم اضافه کنی :


using System.Xml.Serialization;
using System.IO;

PetekDincos
سه شنبه 03 مرداد 1391, 10:42 صبح
با سلام
ممنون از لطف شما , اما این یه کلاس را ذخیره می کنه چطور می شه یه لیست از کلاس را ذخیره کرد با تشکر

hakim22
سه شنبه 03 مرداد 1391, 17:32 عصر
برای اینکار از راحت ترین روش استفاده از ArrayList هست
متغیرهایی که از نوع ArrayList تعریف شده باشند خود به خود Serialize هستند
لیستی از شی مورد نظر بسازید و با همین روش آرایه رو ذخیره کنید

mmd2009
سه شنبه 03 مرداد 1391, 18:32 عصر
با سلام

به جای استفاده از ArrayList از Generic استفاده بکنید ( دلیلش رو هم بارها گفته شده )

به این شکل :

private void Form1_Load(object sender, EventArgs e)
{
List<user> Users = new List<user>
{
new user{UserName="mmd2009",password="123"},
new user{UserName="mmd2010",password="123"},
new user{UserName="mmd2011",password="123"}
};
}
[XmlRootAttribute]
class user
{
[XmlElementAttribute]
public string UserName;
[XmlElementAttribute]
public string password;

}

موفق باشید

PetekDincos
سه شنبه 03 مرداد 1391, 20:31 عصر
با سلام

به جای استفاده از ArrayList از Generic استفاده بکنید ( دلیلش رو هم بارها گفته شده )

به این شکل :

private void Form1_Load(object sender, EventArgs e)
{
List<user> Users = new List<user>
{
new user{UserName="mmd2009",password="123"},
new user{UserName="mmd2010",password="123"},
new user{UserName="mmd2011",password="123"}
};
}
[XmlRootAttribute]
class user
{
[XmlElementAttribute]
public string UserName;
[XmlElementAttribute]
public string password;

}

موفق باشید
با سلام
ممنون می شم یه مثال با استفاده از Generic برای Save,Load یک لیست کلاس بنویسید با تشکر

Esmail Solhkhah
سه شنبه 03 مرداد 1391, 22:17 عصر
با سلام
ممنون می شم یه مثال با استفاده از Generic برای Save,Load یک لیست کلاس بنویسید با تشکر

با اجازه دوست عزیزم جناب دیناروند


using System;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;
using System.Xml.Serialization;

namespace PetekDincos_serialize
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

public class MyClass
{
[XmlElement("ID")]
public int ID
{
get;set;
}

[XmlElement("Name")]
public string Name
{
get; set;
}
}

[XmlRoot("MyClassList")]
public class MyClassList
{
public MyClassList()
{
Items = new List<MyClass>();
}

[XmlElement("MyClass")]
public List<MyClass> Items
{
get; set;
}
}

private void btnSerialize_Click(object sender, EventArgs e)
{
XmlSerializer serializer = new XmlSerializer(typeof(MyClassList));
MyClassList myClassList = new MyClassList();
myClassList.Items.Add(new MyClass { ID = 1, Name = "Test" });
myClassList.Items.Add(new MyClass { ID = 2, Name = "Test2" });
using (FileStream fStream = new FileStream(Application.StartupPath + "\\MyList.xml", FileMode.Create))
{
serializer.Serialize(fStream, myClassList);
}
}


private void btnDeSrialize_Click(object sender, EventArgs e)
{
using (FileStream fStream = new FileStream(Application.StartupPath + "\\MyList.xml", FileMode.Open))
{
XmlSerializer serializer = new XmlSerializer(typeof(MyClassList));
MyClassList myClassList = (MyClassList)serializer.Deserialize(fStream);
}
}
}
}


موفق باشید.