I'm starting a new site and some of the feature they want are making me consider using an xml data structure. The first thing I considered when I though of this is making my data object serializible and simple seralizing and deserializing my objects as the methos of handling the data.
I don't see many downsides to this. I may have to write a hefty search function and a method to sort the data, but as I see it right now the fact that I only have to inherit from my base class serial and overide it's DataRoot property to make a data object save, update and delete/export looks good to me.
What do you guys think?
Code:[System.Serializable] public abstract class Serial { /// <summary>A class Implamenting Serial should overide this property to provide it's root data directory.</summary> protected abstract string DataRoot{get{return "";}} private System.Guid _key; /// <summary></summary> public System.Guid Key{get{return _key;}} /// <summary>Used internally by the inherating class to load saved data.</summary> protected object Load(System.Guid key) { System.IO.FileStream fs = System.IO.File.Open(DataRoot + key.ToString(), System.IO.FileMode.Open); System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); object o = bf.Deserialize(fs); fs.Close(); return o; } /// <summary>Saves object data to it's DataRoot.</summary> public void Save() { if(_key.ToString() == null || _key.ToString() == ""){_key = UniqueKey();} System.IO.FileStream fs = System.IO.File.Create(DataRoot _key.ToString()); System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); bf.Serialize(fs, this); fs.Close(); } /// <summary>Get's a unique key for the DataRoot.</summary> protected System.Guid UniqueKey() { //this is not fool proof another item in another folder could have the key //but nothing in here would be affected so does it matter? System.Guid g = System.Guid.NewGuid(); if(!System.IO.File.Exists(DataRoot + g.ToString())){return g;} return UniqueKey(); } } public class Class1 : Serial { public Class1(){} public Class1(System.Guid key) { Class1 c = (Class1)Load(key); //populate data properties } protected override string DataRoot { get { return "folder data files are in"; } } }




Reply With Quote