Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Runtime.Serialization;
- using System.Security.Permissions;
- using System.Runtime.Serialization.Formatters.Binary;
- using System.IO;
- namespace SettingsDict
- {
- class Program
- {
- static void Main(string[] args)
- {
- Enumerable.Range(0, 10).ToList().ForEach(x => Settings.AddValue(x.ToString(), x));
- Console.WriteLine(string.Join(",", Settings.data.Values));
- var bf = new BinaryFormatter();
- var ms = new MemoryStream();
- bf.Serialize(ms, Settings.data);
- ms.Position = 0;
- for (int i = 0; i < ms.Length; i++)
- Console.Write(ms.ReadByte());
- Console.WriteLine();
- ms.Position = 0;
- var data = (SerializableDictionary<string, object>)bf.Deserialize(ms);
- Console.WriteLine(string.Join(",", data.Values));
- Console.ReadLine();
- }
- }
- static class Settings
- {
- public static SerializableDictionary<string, object> data = new SerializableDictionary<string, object>();
- public static void AddValue<T>(string key, T value)
- {
- data.Add(key, value);
- }
- public static T GetValue<T>(string key)
- {
- return (T)data[key];
- }
- }
- [Serializable]
- public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, ISerializable where TKey : IConvertible
- {
- public SerializableDictionary() { }
- protected SerializableDictionary(SerializationInfo info, StreamingContext context)
- {
- foreach (var datum in info) Add((TKey)Convert.ChangeType(datum.Name, typeof(TKey)), (TValue)datum.Value);
- }
- [SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]
- public override void GetObjectData(SerializationInfo info, StreamingContext context)
- {
- foreach (var datum in this) info.AddValue(datum.Key.ToString(), datum.Value);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement