Advertisement
NPSF3000

SerializableDictionary

Jul 27th, 2012
258
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.12 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Runtime.Serialization;
  6. using System.Security.Permissions;
  7. using System.Runtime.Serialization.Formatters.Binary;
  8. using System.IO;
  9.  
  10. namespace SettingsDict
  11. {
  12.     class Program
  13.     {
  14.         static void Main(string[] args)
  15.         {
  16.             Enumerable.Range(0, 10).ToList().ForEach(x => Settings.AddValue(x.ToString(), x));
  17.  
  18.  
  19.             Console.WriteLine(string.Join(",", Settings.data.Values));
  20.             var bf = new BinaryFormatter();
  21.             var ms = new MemoryStream();
  22.             bf.Serialize(ms, Settings.data);
  23.  
  24.             ms.Position = 0;
  25.             for (int i = 0; i < ms.Length; i++)
  26.                 Console.Write(ms.ReadByte());
  27.             Console.WriteLine();
  28.             ms.Position = 0;
  29.  
  30.             var data = (SerializableDictionary<string, object>)bf.Deserialize(ms);
  31.             Console.WriteLine(string.Join(",", data.Values));
  32.             Console.ReadLine();
  33.         }
  34.     }
  35.  
  36.     static class Settings
  37.     {
  38.         public static SerializableDictionary<string, object> data = new SerializableDictionary<string, object>();
  39.  
  40.         public static void AddValue<T>(string key, T value)
  41.         {
  42.             data.Add(key, value);
  43.         }
  44.  
  45.         public static T GetValue<T>(string key)
  46.         {
  47.             return (T)data[key];
  48.         }
  49.     }
  50.  
  51.     [Serializable]
  52.     public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, ISerializable where TKey : IConvertible
  53.     {
  54.         public SerializableDictionary() { }
  55.         protected SerializableDictionary(SerializationInfo info, StreamingContext context)
  56.         {
  57.             foreach (var datum in info) Add((TKey)Convert.ChangeType(datum.Name, typeof(TKey)), (TValue)datum.Value);
  58.         }
  59.         [SecurityPermissionAttribute(SecurityAction.Demand, SerializationFormatter = true)]
  60.         public override void GetObjectData(SerializationInfo info, StreamingContext context)
  61.         {
  62.             foreach (var datum in this) info.AddValue(datum.Key.ToString(), datum.Value);
  63.         }
  64.     }
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement