public static class TestStatic { // Fields... private static int _Counter; public static int Counter { get { return _Counter; } set { _Counter = value; } } }
public static class SerializeStatic { public static bool Save(Type static_class, string filename) { try { FieldInfo[] fields = static_class.GetFields(BindingFlags.Static | BindingFlags.NonPublic); object[,] a = new object[fields.Length, 2]; int i = 0; foreach (FieldInfo field in fields) { a[i, 0] = field.Name; a[i, 1] = field.GetValue(null); i++; }; Stream f = File.Open(filename, FileMode.Create); SoapFormatter formatter = new SoapFormatter(); formatter.Serialize(f, a); f.Close(); return true; } catch { return false; } } public static bool Load(Type static_class, string filename) { try { FieldInfo[] fields = static_class.GetFields(BindingFlags.Static | BindingFlags.NonPublic); object[,] a; Stream f = File.Open(filename, FileMode.Open); SoapFormatter formatter = new SoapFormatter(); a = formatter.Deserialize(f) as object[,]; f.Close(); if (a.GetLength(0) != fields.Length) return false; int i = 0; foreach (FieldInfo field in fields) { if (field.Name == (a[i, 0] as string)) { if (a[i, 1] != null) field.SetValue(null, a[i, 1]); } i++; }; return true; } catch { return false; } } }
public static BrowserSettings OperaSettings { get { return _OperaSettings; } set { _OperaSettings = value; } }
[Serializable] public class BrowserSettings { //... }
SerializeStatic.Save(typeof(TestStatic), "file.xml");
if (!SerializeStatic.Load(typeof(AppSettings), "file.xml")) ;
Source: https://habr.com/ru/post/137405/
All Articles