рд╕реА # рдореЗрдВ рд╕реНрдерд┐рд░ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕реАрд░рд┐рдпрд▓ рдХрд░рдирд╛

рдкреНрд░рд╕рдВрдЧ

рдореБрдЭреЗ рдпрд╣ рд╕рд╡рд╛рд▓ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдорд┐рд▓рд╛, рдЬрд┐рд╕рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВред рдЗрд╕ рддрдереНрдп рдХреЗ рдорджреНрджреЗрдирдЬрд░ рдХрд┐ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдирдИ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ рдЬрд┐рд╕реЗ рдХрд┐рд╕реА рднреА рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдПрдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╣рдордиреЗ рдЗрд╕реЗ AppSettings рдХрд╣рд╛ред рдмреЗрд╢рдХ, рдЖрдк Properties.Settings рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ... рдореИрдВ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдлрд┐рдЯ рдирд╣реАрдВ рдерд╛ред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рд░

рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рд╡рд░реНрдЧ рд╕реНрдерд┐рд░ рд╣реИ, рд╕рд╛рдорд╛рдиреНрдп рдХреНрд░рдорд╛рдВрдХрди рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рдЗрд╕реЗ рджреЗрдЦреЗрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рд╣реИ:
public static class TestStatic { // Fields... private static int _Counter; public static int Counter { get { return _Counter; } set { _Counter = value; } } } 


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдпрджрд┐ рд╡рд░реНрдЧ рд╕реНрдерд┐рд░ рдирд╣реАрдВ рдерд╛, рддреЛ рдЖрдк System.Xml.Serialization.XmlSerializer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╣рдорд╛рд░рд╛ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рд╣реИ, рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреНрдпреЛрдВрдХрд┐ XmlSerializer.Serialize рд╡рд┐рдзрд┐ рдХреЛ рд╡рд░реНрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╡рд░реНрдЧ рдкреНрд░рдХрд╛рд░ рдХреА рдирд╣реАрдВ, рдХрдВрдкрд╛рдЗрд▓рд░ 'Test1.TestStatic' рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛ рдПрдХ 'рдкреНрд░рдХрд╛рд░' рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ 'рдЬреИрд╕реЗ' рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ тАЩред

рдирд┐рд░реНрдгрдп

рдереЛрдбрд╝реА рд╕реА рдЧреБрдЧрд▓реА рдХрд░рддреЗ рд╣реБрдП, рдореБрдЭреЗ рдХреБрдЫ рднреА рд╕рдордЭрджрд╛рд░ рдирд╣реАрдВ рд▓рдЧрд╛ред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдореИрдВрдиреЗ рджреЗрдЦреА, рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдерд┐рд░ рд╡рд░реНрдЧ рд╡рд╛рд▓реЗ рд╡рд░реНрдЧ рдХреЛ рдХреИрд╕реЗ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рд╕рд┐рд░реНрдл рд░рд┐рдлреНрд▓реЗрдХреНрд╢рди рдШреВрдо рд░рд╣рд╛ рдерд╛ред рдЦреИрд░, рдХреБрдЫ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдирд┐рдореНрди рд╡рд░реНрдЧ рдмрдирд╛рдпрд╛:

 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; } } } 


рдмрд┐рдВрджреБ рд╕рд░рд▓ рд╣реИ:
  1. рд╣рдореЗрдВ рд╕реНрдерд┐рд░ рдХреНрд╖реЗрддреНрд░ рдорд┐рд▓рддреЗ рд╣реИрдВ:
    FieldInfo [] рдлрд╝реАрд▓реНрдбреНрд╕ = static_class.GetFields (BindingFlags.Static | BindingFlags.NonPublic);
  2. рдПрдХ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдмрдирд╛рдПрдВ рдФрд░ рдЙрд╕рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд╛рдо рдФрд░ рдорд╛рди рдбрд╛рд▓реЗрдВ
  3. рдареАрдХ рд╣реИ, рддреЛ SoapFormater рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рдо рдлрд╛рдЗрд▓ рдкрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВред


рдПрдХ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ: рдпрджрд┐ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдореЗрдВ, рдХрд┐рд╕реА рдПрдХ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рдФрд░ рд╡рд░реНрдЧ рд╣реЛрдЧрд╛, рддреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рджреВрд╕рд░реА рдХрдХреНрд╖рд╛ рдХреЛ [рдХреНрд░рдорд┐рдХ] рдХреЗ рд░реВрдк рдореЗрдВ рдирд╛рдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдпрд╣реА рд╣реИ, рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЯреЗрд╕реНрдЯрд╕реНрдЯреЗрдЯрд┐рдХ рдореЗрдВ рдРрд╕реА рдШреЛрд╖рдгрд╛ рд╣реИ:

 public static BrowserSettings OperaSettings { get { return _OperaSettings; } set { _OperaSettings = value; } } 

рддрдм BrowserSettings рд╡рд░реНрдЧ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
 [Serializable] public class BrowserSettings { //... } 


рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
 SerializeStatic.Save(typeof(TestStatic), "file.xml"); 


рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
 if (!SerializeStatic.Load(typeof(AppSettings), "file.xml")) ; 

Source: https://habr.com/ru/post/In137405/


All Articles