рд╕рд┐рдВрдЧрд▓рдЯрди рд╕реАрд░рд┐рдпрд▓ рдпрд╛ рд░реЙрдХ рдЧрд╛рд░реНрдбрди

рдЫрд╡рд┐

рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди, рдореИрдВ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рдВрд░рдХреНрд╖рдг рдФрд░ рдмрд╣рд╛рд▓реА рдХреЗ рд╕рд╛рдеред рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдЖрд╕рд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрддреНрдерд░реЛрдВ рдФрд░ рдХреЛрдмрд▓рд╕реНрдЯреЛрди рдХреЗ рдмрдЧреАрдЪреЗ рдореЗрдВ рдПрдХ рд░реЛрдорд╛рдВрдЪрдХ рдпрд╛рддреНрд░рд╛ рдореЗрдВ рдмрджрд▓ рдЧрдИ: рджреЛ рд╕рд┐рдВрдЧрд▓реЗрдЯреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╕реЗ рд▓реЗрдХрд░ рдЦреЗрддреЛрдВ рдХреА рдХреНрд░рдордмрджреНрдзрддрд╛ рдХреА рдХрдореА рддрдХред

рд▓реЗрдХрд┐рди рдПрдХ рдмрдЧреАрдЪреЗ рдореЗрдВ рдмрд╛рдбрд╝ рдХреНрдпреЛрдВ?

рдкрд╣рд▓рд╛ рддрд╛рд░реНрдХрд┐рдХ рдкреНрд░рд╢реНрди рд╣реИ: рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдлрд┐рд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдЗрд╕ рддрд░рд╣ рдХреА рдЪрд╛рд▓, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдХреНрд╕рд░ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХрдИ рд▓реЛрдЧ рдЬреЛ рдЕрднреА WPF рдпрд╛ WinForms рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдХреГрдкрдпрд╛ рдЕрдкрдирд╛ рд╕рдордп рдмрд░реНрдмрд╛рдж рди рдХрд░реЗрдВ рдФрд░ рдкрд╣рд┐рдпрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рди рдХрд░реЗрдВ: рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВ (рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдВ рдФрд░ рдпрд╣рд╛рдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ)ред рдпрд╣рд╛рдБ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВ рдЬрд╣рд╛рдБ рдХреНрд░рдордмрджреНрдзрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ:
рдореИрдВ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдпрд╛ AppDomain рдХреЗ рдмреАрдЪ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдПрдХ рд╕рд╛рде рдПрдХ рд╣реА ftp рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрдирдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВред Ftp рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ (рдФрд░ рд╡рд╣рд╛рдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВ)ред
рд╡рд░реНрдЧ рдХреНрд░рдордмрджреНрдз рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рддрддреНрд╡реЛрдВ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореВрд▓реНрдп рд╕рднреА рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕реЗ рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг DBNull рд╣реИ ред
рдПрдХрд╛рдХреА рд╡рд╕реНрддреБ

рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЗрд╕ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЛ рд▓реЗрдВ:
public sealed class Settings : ISerializable { private static readonly Settings Inst = new Settings(); private Settings() { } public static Settings Instance { get { return Inst; } } public String ServerAddress { get { return _servAddr; } set { _servAddr = value; } } public String Port { get { return _port; } set { _port = value; } } private String _port = ""; } 

рддреБрд░рдВрдд рдореИрдВ рдХреЛрдб рдкрд░ рдХреБрдЫ рдЯрд┐рдкреНрдкрдгреА рдХрд░реВрдВрдЧрд╛:

рдкрд╣рд▓реЗ рджреЗрдЦреЛ

рд╕рд░рд▓ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕реА # рдореЗрдВ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд▓рд┐рдП, рдмрд╕ рд╕реАрд░рд┐рдпрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝реЗрдВред рдЦреИрд░, рд╣рдо рдпрд╣ рдирд╣реАрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдорд╛рдорд▓рд╛ рдХрд┐рддрдирд╛ рдЬрдЯрд┐рд▓ рд╣реИ рдФрд░ рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЬреЛрдбрд╝реЗрдВред рдЕрдм рдЖрдЗрдП рддреАрди рддрд░реАрдХреЛрдВ рд╕реЗ рдЕрдкрдиреЗ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ: рд╕реЛрдк , рдмрд╛рдЗрдирд░реА рдФрд░ рдкреНрд▓реЗрди рдПрдХреНрд╕рдПрдордПрд▓ ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╛рдЗрдирд░реА рдХреЛ рд╕реАрд░реАрдЬрд╝ рдФрд░ рдбрд┐рд╕реНрдХреНрд░рд┐рдЕрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ (рдЕрдиреНрдп рд╡рд┐рдзрд┐рдпрд╛рдБ рд╕рдорд╛рди рд╣реИрдВ):
 using (var mem = new MemoryStream()) { var serializer = new BinaryFormatter(); serializer.Serialize(mem, Settings.Instance); mem.Seek(0, SeekOrigin.Begin); object o = serializer.Deserialize(mem); Console.WriteLine((Settings)o == Settings.Instance); } 

(рдирд╣реАрдВ) рдЕрдкреЗрдХреНрд╖рд┐рдд рдЧрд▓рдд рдХрдВрд╕реЛрд▓ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╣рдореЗрдВ рджреЛ рд╕рд┐рдВрдЧрд▓рдЯрди рдСрдмреНрдЬреЗрдХреНрдЯ рдорд┐рд▓реЗ рд╣реИрдВред рдпрд╣ рдкрд░рд┐рдгрд╛рдо рдкреВрд░реНрд╡рд╛рднрд╛рд╕рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╣рдо рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдбрд┐рд╕реЗрд░рд┐рдПрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдПрдХ рдирд┐рдЬреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рднреА рдбреАрдЬрд╝рд░реАрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдП рдЧрдП рдорд╛рдиреЛрдВ рдХреЛ рдирдИ рд╡рд╕реНрддреБ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛рддрд╛ рд╣реИ ред UPD : рдЬреИрд╕рд╛ рдХрд┐ рдХреЗрдХреЗрдХрд╕ рдиреЗ рдХрд╣рд╛ рд╣реИ рдХрд┐ рдирд┐рдЬреА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди
BinaryFormatter FormatterServices.GetSafeUninitializedObject рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдВрд╕реНрдЯреЗрдВрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдпрд╣ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреА рдпрд╣ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдмрдЧреАрдЪреЗ рдореЗрдВ рдкрд╣рд▓рд╛ рдкрддреНрдерд░ рджреЗрддрд╛ рд╣реИ: рд╕рд┐рдВрдЧрд▓рдЯрди рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдмрдирдирд╛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред

рдЬрдЯрд┐рд▓ рдФрд░ ... рдЕрдзрд┐рдХ рдкрддреНрдерд░ рдбрд╛рд▓ рджрд┐рдпрд╛ред

рдЪреВрдВрдХрд┐ рдпрд╣ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЬрдЯрд┐рд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдЧрд╛ред рдпрджрд┐ рд╣рдо ISerializable рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреНрд░рдорд╛рдВрдХрди рдХреА рдЕрдзрд┐рдХ "рдореИрдиреБрдЕрд▓" рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдХреЛрдИ рд▓рд╛рдн рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ: рдкрд┐рдЫрд▓реА рдкрд░реЗрд╢рд╛рдиреА рдЧрд╛рдпрдм рдирд╣реАрдВ рд╣реБрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдЯрд┐рд▓рддрд╛ рдмрдврд╝ рдЧрдИ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдЧреЗ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрднреА рднреА рд╢рд╛рдпрдж рд╣реА рдХрднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ IObjectReference рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд╣ рд╕рдм рдЬреЛ рд╡рд╣ рдХрд░рддрд╛ рд╣реИ: рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдЧ рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд┐рд╕реА рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ, рд╣реИ рдирд╛? рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдПрдХ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдЗрд╕ рддрд░рд╣ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдбрд┐рд╕реЗрд░реНрдмрд▓рд╛рдЗрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЬреЛ рдЗрд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЗ рд▓рд┐рдП рдкреЙрдЗрдВрдЯрд░ рд▓реМрдЯрдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реЛрдЧрд╛ред рд╡рд░реНрдЧ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
 [Serializable] internal sealed class SettingsSerializationHelper : IObjectReference { public Object GetRealObject(StreamingContext context) { return Settings.Instance; } } 

рдЕрдм рд╣рдо SettingsSerializationHelper рд╡рд░реНрдЧ рдХреА рдПрдХ рд╡рд╕реНрддреБ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ deserialization рдкрд░, Settings.Instance рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдЪ рд╣реИ, рджреЛ рдФрд░ рджреЛ рдкрддреНрдерд░ рд╣реИрдВ:

рдкрд╣рд▓реЗ рдкрддреНрдерд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЬреЛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕реБрдЦрдж рдирд╣реАрдВ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди GetObjectData рдХреЗ рдЕрдВрджрд░ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЧ рдХреЛ рдмрджрд▓рдирд╛ рд╣реИред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛ (рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЗ рдЕрдВрджрд░):
 public void GetObjectData(SerializationInfo info, StreamingContext context) { info.SetType(typeof(SettingsSerializationHelper)); } 

рдЕрдм, рдЬрдм рд╣рдо рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп SettingsSerializationHelper рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рд╣реЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЬрдм deserializing, рд╣рдо рдЕрдкрдиреЗ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЛ рд╡рд╛рдкрд╕ рд▓рд╛рддреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рд╡рд░реНрдгрд┐рдд рдХреНрд░рдорд╛рдВрдХрди рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдХрдВрд╕реЛрд▓ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдмрд╛рдЗрдирд░реА рдФрд░ рдПрд╕рдУрдПрдкреА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдХрдВрд╕реЛрд▓ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рд╕рд╣реА рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдХреНрд╕рдПрдордПрд▓ рдХреНрд░рдорд╛рдВрдХрди рдХреЗ рд▓рд┐рдП - рдЕрд╕рддреНрдпред рдЗрд╕рд▓рд┐рдП, XMLSerializer GetObjectData рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрд╕ рдЕрдкрдиреЗ рджрдо рдкрд░ рд╕рднреА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд╖реЗрддреНрд░реЛрдВ / рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдбрд░реНрдЯреА рд╣реИрдХреНрд╕

рдЦреЗрддреЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣рдорд╛рд░реЗ рдмрдЧреАрдЪреЗ рдХрд╛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдкрддреНрдерд░ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдФрд░ рдИрдорд╛рдирджрд╛рд░ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдИрдорд╛рдирджрд╛рд░, рдХрд╛рдлреА рд▓рдЪреАрд▓рд╛ "рд╣реИрдХ" рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдХрд▓рд╛ред
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, GetObjectData рд╡рд┐рдзрд┐ рдореЗрдВ , рдПрдХрд▓ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреА рдмрдЪрдд рдЬреЛрдбрд╝реЗрдВред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
 public void GetObjectData(SerializationInfo info, StreamingContext context) { info.SetType(typeof(SettignsSerializeHelper)); info.AddValue("_servAddr", ServerAddressr); info.AddValue("_port", Port); } 

рдпрджрд┐ рдЖрдк рдЕрдм SOAP рдХреНрд░рдорд╛рдВрдХрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рднреА рдХреНрд╖реЗрддреНрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрд░рдордмрджреНрдз рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдордиреЗ рд╕реЗрдЯрд┐рдЧреНрдиреЗрд╕реЗрд░рд┐рдПрд░рд╛рдЗрдЬреЗрд╢рди рд╣реЗрд▓реНрдкрд░ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдпреЗ рдХреНрд╖реЗрддреНрд░ рдирд╣реАрдВ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ deserialization рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрдВрдЧреАред рджреЛ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ:

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, GetObjectData рд╡рд┐рдзрд┐ рдмрджрд▓реЗрдВ:
 public void GetObjectData(SerializationInfo info, StreamingContext context) { info.SetType(typeof (SettignsSerializeHelper)); var fields = from field in typeof (Settings).GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public) where field.GetCustomAttribute(typeof (NonSerializedAttribute)) == null select field; foreach (var field in fields) { info.AddValue(field.Name, field.GetValue(Settings.Instance)); } } 

рдорд╣рд╛рди, рдЕрдм рдЬрдм рд╣рдо рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ рдПрдХ рдПрдХрд▓ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╣рдорд╛рд░реЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдХрд╛рдо рдХрд┐рдП рдмрд┐рдирд╛ рднреА рдзрд╛рд░рд╛рд╡рд╛рд╣рд┐рдХ рд╣реЛрдЧрд╛ред рдЪрд▓рд┐рдП рдбрд┐рд╕рд┐рдПрд░рд▓рд╛рдЗрдЬреЗрд╢рди рдХреА рдУрд░ рдмрдврд╝рддреЗ рд╣реИрдВред
рд╕рднреА рд╕рд┐рдВрдЧреНрд▓рдЯрди рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ SetignsSerializationHelper рдореЗрдВ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреЛрд╣рд░рд╛рд╡ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд░реЛрдЧреЗрдЯ рдЪрдпрдирдХрд░реНрддрд╛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдФрд░ SettignsSerializationHelper рдХреЛ рдмрджрд▓реЗрдВ ред
рдирдпрд╛ рдирд┐рдкрдЯрд╛рди
 [Serializable] internal sealed class SettignsSerializeHelper : IObjectReference { public readonly Dictionary<String, object> infos = (from field in typeof (Settings).GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public) where field.GetCustomAttribute(typeof (NonSerializedAttribute)) == null select field).ToDictionary(x => x.Name, x => new object()); public object GetRealObject(StreamingContext context) { foreach (var info in infos) { typeof (Settings).GetField(info.Key, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public).SetValue(Settings.Instance, info.Value); } return Settings.Instance; } } 

рдФрд░ рдЗрд╕рд▓рд┐рдП, рдПрдХ рд╣реИрд╢ рдореИрдк SetignsSerializationHelper рдХреЗ рдЕрдВрджрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдХреБрдВрдЬреА рдХреНрд░рдордмрджреНрдз рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЗ рдирд╛рдо рд╣реИрдВ, рдФрд░ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдореВрд▓реНрдп, рдбреАрд░рд┐рдПрд░рд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдмрд╛рдж рдЗрди рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЗ рдорд╛рди рдмрди рдЬрд╛рдПрдВрдЧреЗред рдпрд╣рд╛рдВ, рдЕрдзрд┐рдХ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрд╢рди рдХреЗ рд▓рд┐рдП, рдЖрдк рдЗрдиреНрдлреЛрд╕ рдХреЛ рдирд┐рдЬреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░рдореБрдЦ-рдореВрд▓реНрдп рд╡рд╛рд▓реЗ рдЬреЛрдбрд╝реЗ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдзрд┐ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред GetRealObject рдХреЗ рдЕрдВрджрд░ , рд╣рдо рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЛ рдЙрд╕рдХреЗ рдирд┐рд░реНрдЬрди рдХреНрд╖реЗрддреНрд░ рдорд╛рдиреЛрдВ рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред
рдЕрдм рдпрд╣ рдХреЗрд╡рд▓ рдЗрдиреНрдлрд╝реЛрд╕ рдлрд╝реАрд▓реНрдб рдорд╛рдиреЛрдВ рдХреЛ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЪрдпрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
 internal sealed class SettingsSurrogate : ISerializationSurrogate { public void GetObjectData(object obj, SerializationInfo info, StreamingContext context) { throw new NotImplementedException(); } public object SetObjectData(object obj, SerializationInfo info, StreamingContext context, ISurrogateSelector selector) { var ssh = new SettignsSerializeHelper(); foreach (var val in info) { ssh.infos[val.Name] = val.Value; } return ssh; } } 

рдЪреВрдБрдХрд┐ рдЪрдпрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдбреАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╣рдо рдХреЗрд╡рд▓ SetObjectData рд▓рд┐рдЦреЗрдВрдЧреЗред рдЬрдм obj (рдПрдХ deserializable рдСрдмреНрдЬреЗрдХреНрдЯ) рдЪрдпрдирдХрд░реНрддрд╛ рдХреЗ рдЕрдВрджрд░ рдЖрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рдХреНрд╖реЗрддреНрд░ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ 0 рдФрд░ рдЕрд╢рдХреНрдд рд╕реЗ рднрд░ рдЬрд╛рддреЗ рд╣реИрдВ ( desjialization рдХреЗ рджреМрд░рд╛рди FormatterServices рд╕реЗ GetUninitializedObject рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж obj рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ)ред рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рдирдпрд╛ рд╕реЗрдЯрд▓рд╕рд┐рдЧреНрдиреЗрд╕реЗрд░рд╛рдЗрдЬреЗрд╢рди рд╣реЗрд▓реНрдкрд░ рдмрдирд╛рдирд╛ рдФрд░ рдЙрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ (рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдбреАрд░рд┐рдпрд▓рд╛рдЗрдЬреНрдб рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛)ред рдЗрд╕рдХреЗ рдмрд╛рдж, рдлреЙрд░реНрдЪреНрдпреВрдирд░ рдХреЗ рдЕрдВрджрд░, рдЗрдиреНрдлреЗрд░рд┐рдпрд▓рд╛рдЗрдЬреНрдб рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЗрдиреНрдлреЛрд╕ рдХреЛ рднрд░реЗрдВ, рдЬреЛ рддрдм рд╕рд┐рдВрдЧрд▓рдЯрди рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛рдПрдЧрд╛ред
рдФрд░ рдЕрдм рдХреНрд░рдорд╛рдВрдХрди / рдбрд┐рд╕реЗрд░рд┐рдПрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реНрд╡рдпрдВ:
      /: using (var mem = new MemoryStream()) { var soapSer = new SoapFormatter(); soapSer.Serialize(mem, Settings.Instance); var ss = new SurrogateSelector(); ss.AddSurrogate(typeof(SettignsSerializeHelper), soapSer.Context, new SettingsSurrogate()); soapSer.SurrogateSelector = ss; mem.Seek(0, SeekOrigin.Begin); var o = soapSer.Deserialize(mem); Console.WriteLine((Settings)o == Settings.Instance); } 

рдХрдВрд╕реЛрд▓ рдкрд░ рд╕рд╣реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рд╕рднреА рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрдВрдд рдореЗрдВ, рд╣рдо рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдП рдФрд░ рдЕрдкрдиреЗ рд░реЙрдХ рдЧрд╛рд░реНрдбрди рдХреЛ рдЙрд╕рдХреЗ рдЙрдЪрд┐рдд рд░реВрдк рдореЗрдВ рд▓реЗ рдЖрдПред

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


All Articles