public static void WriteTo(GenericDictionary dictionary, MetadataWriter metadata)
 {
     foreach (string key in dictionary.Keys)
     {
         object value = dictionary.Get <object>(key);
         metadata.GetType().InvokeMember("Put", BindingFlags.InvokeMethod, Type.DefaultBinder, metadata, new object[] { key, value });
     }
 }
        public static void ReadFrom(MetadataReader metadata, GenericDictionary dictionary)
        {
            foreach (string key in metadata.Keys)
            {
                Type myType = metadata.GetValueType(key);

                MethodInfo method = dictionary.GetType().GetMethod("Put");
                method = method.MakeGenericMethod(myType);

                MethodInfo metaMethod = metadata.GetType().GetMethod("Get");
                metaMethod = metaMethod.MakeGenericMethod(myType);

                object value = metaMethod.Invoke(metadata, new object[] { key });
                method.Invoke(dictionary, new object[] { key, value });
            }
        }