PDA

View Full Version : سوال: ذخيره و بازيابي كردن collection در فايل



jalalx
دوشنبه 31 فروردین 1388, 11:20 صبح
با سلام!
كسي از دوستان مي دونه چطوري ميشه هر collection رو تو فايل ذخيره و بازيابي كرد؟

esmaeily-hosein
دوشنبه 31 فروردین 1388, 11:41 صبح
//Serialize
List<int> IDs=new List<int>(new int[10] {1,2,3,4,5,6,7,8,9,128});
XmlSerializer serializer = new XmlSerializer(typeof(List<int>));
using (FileStream fStream = File.Create("C:\\data.txt"))
{
serializer.Serialize(fStream, IDs);
fStream.Flush();
}

//Deserilize
using (FileStream fStream = File.Open("C:\\data.txt",FileMode.Open))
{
List<int> deserilizeObject= serializer.Deserialize(fStream) as List<int>;
}

prankster
دوشنبه 31 فروردین 1388, 22:41 عصر
هر collection را نمی توان در فایل ذخیره کرد، اجزای collection باید Serializable باشند، از متد SOAP Serialization برای serializa کردن اکثر تایپ ها می توان استفاده کرد و اکثر platform ها مثل Java یا .Net پشتیبانی خوبی از SOAP دارند. از Binary Serialization می توان برای Serialize کردن استفاده کرد که حلقه وسیع تری از اشیا را در بر می گیرد ولی platform های مختلف پشتیبانی مختلفی از آن دارند.
نهایتا برای ذخیره کردن اشیایی که Serializable نیستند باید متد Serialize کردن را خودتان برای کلاس بنویسید.

esmaeily-hosein
سه شنبه 01 اردیبهشت 1388, 10:30 صبح
هر چند در 90 درصد موارد collection های .net کار ما رو راه میندازه ولی خوبه نمونه ای از custome collection را هم بهش نگاهی بندازیم .


[Serializable]
public class CustomeCollection :CollectionBase,
IXmlSerializable
{
//Indexer
public Item this[int index]
{
get { return List[index] as Item; }
}

public int Add(int id,string name)
{
return base.List.Add(new Item(id, name));
}

#region IXmlSerializable Members

public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
}

public void ReadXml(System.Xml.XmlReader reader)
{
int Id = -1;
string name = string.Empty;
while (reader.Read())
{
if (reader.Name == "ID")
{
Id = Convert.ToInt32(reader.ReadInnerXml() );
reader.Read();
name = reader.Value;
Add(Id, name);
}
}
reader.Read();
}

public void WriteXml(System.Xml.XmlWriter writer)
{
writer.WriteStartElement("Items");
foreach (Item key in base.List)
{
writer.WriteElementString("ID", key.ID.ToString());

writer.WriteElementString("Name", key.Name);
}
writer.WriteEndElement();
}

#endregion
}


public class Item
{
public Item(){}

public Item(int id,string name):this()
{
ID = id;
Name = name;
}

[XmlElement]
public int ID
{
get;
protected set;
}

[XmlElement]
public string Name
{
get;
protected set;
}
}