命名空间:sharClass.Serialize
功能: 以序列化方式保存程序配置文件的类,可被继承。
版本要求: netMarketingv1.3.2及以上
功能详细说明:
以序列化方式保存程序配置文件的类,可被继承。
常用函数列表:
//构造函数,传入配置文件名(带路径) public Serialize(string filePath) /// 将对象序列化,要序列化的对象需要事先加标签[Serializable] public static void FileSerialize(string FilePath, object obj) /// 将文件反序列化,要序列化的对象需要事先加标签[Serializable] public static object FileDeSerialize(string FilePath) public static string SerializeColor(Color color) public static Color DeserializeColor(string color) public static XmlFont SerializeFont(Font font) public static Font DeserializeFont(XmlFont font) public virtual Serialize Load(string filePath) public virtual T Load<T>(string filePath) where T : Serialize public virtual T Load<T>() where T : Serialize public virtual T ReadFrom<T>(string filePath) where T : Serialize //载入配置 public virtual object Load() //保存配置 public virtual object Save() public virtual object Save(string filePath)
参考例子:
首先,创建一个类,继承Serialize。
这个类里面可以写上你要保存的变量,也可以是字段,如果愿意,也可以带有方法。
注意:你可能觉得无参构造函数Serialize_test是没有必要的,但是没有它则无法序列化!
using sharClass; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; namespace demo { public class Serialize_test: Serialize { public Serialize_test() { } public Serialize_test(string name):base(name) { } public string msg1 = "这是测试变量msg1"; [Category("Product设置"), DisplayName("01_数据存储目录"), Description("即存放的目录位置")] [DefaultValue("E:\\Data"), Editor(typeof(System.Windows.Forms.Design.FolderNameEditor), typeof(System.Drawing.Design.UITypeEditor))] public string Product_DataFolder { get; set; } [Category("Product设置"), DisplayName("厚度上限"), Description("厚度上限")] [DefaultValue(0.15)] public double Product_Limit_ThicknessMax { get; set; } [Category("Product设置"), DisplayName("厚度下限"), Description("厚度下限")] [DefaultValue(0.05)] public double Product_Limit_ThicknessMin { get; set; } } }
接下来,如果使用这引类的Save, Load方法就可以存取变量内容了。
你也可以把这个类绑定给propertyGrid控件,以方便修改变量内容。
Serialize_test SerializeConfig = new Serialize_test("d:\\SerializeConfig"); private void button6_Click(object sender, EventArgs e) { SerializeConfig=(Serialize_test) SerializeConfig.Load(); MessageBox.Show(SerializeConfig.msg1); propertyGrid2.SelectedObject = SerializeConfig; propertyGrid2.CollapseAllGridItems(); } private void button7_Click(object sender, EventArgs e) { SerializeConfig.Save(); }
见下图:
另个,这个类的两个静态方法,FileSerialize,FileDeSerialize。
FileSerialize可以用来序列化保存添加了 [Serializable]标签的对象,FileDeSerialize则读取硬盘文件上的这个对象。
请参考下面的例子,其中我们要保存的对象是fsp,它是一个结构体FormSizeandLocation的实例对象。
下面例子演示了这个fsp对象的读写。
[Serializable] public struct FormSizeandLocation { public int SizeW; public int SizeH; public int LocationX; public int LocationY; public int Style; } //序列化 private FormSizeandLocation fsp = new FormSizeandLocation(); public void FormcloseEvent(object sender, EventArgs e) { if (!(sender is Form)) return; try { Form form = (Form)sender; switch (form.WindowState) { case FormWindowState.Maximized: fsp.Style = 2; fsp.SizeW = form.Width; fsp.SizeH = form.Height; fsp.LocationX = form.Location.X; fsp.LocationY = form.Location.Y; break; case FormWindowState.Minimized: fsp.Style = 1; break; case FormWindowState.Normal: fsp.Style = 0; fsp.SizeW = form.Width; fsp.SizeH = form.Height; fsp.LocationX = form.Location.X; fsp.LocationY = form.Location.Y; break; } Serialize.FileSerialize(AppDomain.CurrentDomain.BaseDirectory + form.Name + "_Location.set", fsp); } catch (Exception ex) { } } //反序列化 public void FormloadEvent(object sender, EventArgs e) { if (!(sender is Form)) return; Form form = (Form)sender; try { object result = Serialize.FileDeSerialize(AppDomain.CurrentDomain.BaseDirectory + form.Name + "_Location.set"); if (result != null) { fsp = (FormSizeandLocation)result; switch (fsp.Style) { case 2: form.WindowState = FormWindowState.Maximized; break; default: form.WindowState = FormWindowState.Normal; break; } form.Left = fsp.LocationX; form.Top = fsp.LocationY; form.Size = new Size(fsp.SizeW, fsp.SizeH); } } catch { } }
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

