Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.ComponentModel;
- using System.ComponentModel.Design.Serialization;
- using System.Reflection;
- using System.Windows.Forms;
- public class VisualStudioWorkaroundSerializer : CodeDomSerializer
- {
- private CodeDomSerializer GetNormalSerializer(IDesignerSerializationManager manager, object codeObject)
- {
- // TODO examine codeObject's ancestors to get the right serializer?
- if (codeObject is Control)
- {
- return (CodeDomSerializer)manager.GetSerializer(typeof(Control), typeof(CodeDomSerializer));
- }
- return (CodeDomSerializer)manager.GetSerializer(typeof(Component), typeof(CodeDomSerializer));
- }
- public override object Deserialize(IDesignerSerializationManager manager, object codeObject)
- {
- return GetNormalSerializer(manager, codeObject).Deserialize(manager, codeObject);
- }
- public override object Serialize(IDesignerSerializationManager manager, object value)
- {
- var componentSerialiser = (CodeDomSerializer)manager.GetSerializer(typeof(Component), typeof(CodeDomSerializer));
- var fieldInfo = componentSerialiser.GetType().GetField("_containerConstructor", BindingFlags.GetField | BindingFlags.NonPublic | BindingFlags.Instance);
- if (fieldInfo != null)
- {
- Type[] values = (Type[])fieldInfo.GetValue(componentSerialiser);
- if (values != null && values.Length > 0)
- {
- var reflectContType = GetReflectionTypeFromTypeHelper(manager, typeof(IContainer));
- var cachedType = values[0];
- if (!reflectContType.Equals(cachedType))
- {
- fieldInfo.SetValue(componentSerialiser, null);
- throw new Exception("Visual Studio was about to save this object without a component collection.\nI've fixed the problem and you should be able to save this object now.");
- }
- }
- }
- return GetNormalSerializer(manager, value).Serialize(manager, value);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement