View Full Version : ذخیره لیستی یک کلاس در فایل xml
PetekDincos
سه شنبه 03 مرداد 1391, 01:00 صبح
با سلام
دوستان من می خوام لیستی از یه کلاس رو در یه فایل xml ذخیره کنم و بعد بخونم
مثلا کلاس MyClass که به صورت زیر می باشد رو به صورت یه لیست ازش دارم و می خوام در فایل xml ذخیره کنم و از فایل xml همون لیست رو بتونم بازیابی کنم ممنون می شم راهنماییم کنید با تشکر
public Class MyClass
{
public int ID{get;set;}
public string Name{get;set}
}
hakim22
سه شنبه 03 مرداد 1391, 11: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, 11:42 صبح
با سلام
ممنون از لطف شما , اما این یه کلاس را ذخیره می کنه چطور می شه یه لیست از کلاس را ذخیره کرد با تشکر
hakim22
سه شنبه 03 مرداد 1391, 18:32 عصر
برای اینکار از راحت ترین روش استفاده از ArrayList هست
متغیرهایی که از نوع ArrayList تعریف شده باشند خود به خود Serialize هستند
لیستی از شی مورد نظر بسازید و با همین روش آرایه رو ذخیره کنید
mmd2009
سه شنبه 03 مرداد 1391, 19: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, 21: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, 23: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);
}
}
}
}
موفق باشید.
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.