Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Imports System.ComponentModel.Design.Serialization
- Imports System.ComponentModel
- Imports System.ComponentModel.Design
- Imports System.Reflection
- Imports System.CodeDom
- Public Class VisualStudioWorkaroundSerializer
- Inherits CodeDomSerializer
- Private Function GetNormalSerializer(manager As IDesignerSerializationManager, codeObject As Object) As CodeDomSerializer
- ' TODO examine codeObject's ancestors to get the right serializer?
- If TypeOf codeObject Is Control Then
- Return DirectCast(manager.GetSerializer(GetType(Control), GetType(CodeDomSerializer)), CodeDomSerializer)
- End If
- Return DirectCast(manager.GetSerializer(GetType(Component), GetType(CodeDomSerializer)), CodeDomSerializer)
- End Function
- Public Overrides Function Deserialize(manager As IDesignerSerializationManager, codeObject As Object) As Object
- Return GetNormalSerializer(manager, codeObject).Deserialize(manager, codeObject)
- End Function
- Public Overrides Function Serialize(manager As IDesignerSerializationManager, value As Object) As Object
- Dim componentSerialiser = DirectCast(manager.GetSerializer(GetType(Component), GetType(CodeDomSerializer)), CodeDomSerializer)
- Dim fieldInfo = componentSerialiser.GetType().GetField("_containerConstructor", BindingFlags.GetField Or BindingFlags.NonPublic Or BindingFlags.Instance)
- If fieldInfo IsNot Nothing Then
- Dim values As Type() = CType(fieldInfo.GetValue(componentSerialiser), Type())
- If values IsNot Nothing And values.Count > 0 Then
- Dim reflectContType = CodeDomSerializerBase.GetReflectionTypeFromTypeHelper(manager, GetType(IContainer))
- Dim cachedType = values(0)
- If Not reflectContType.Equals(cachedType) Then
- fieldInfo.SetValue(componentSerialiser, Nothing)
- Throw New Exception(
- String.Format("Visual Studio was about to save this object without a component collection.{0}" +
- "I've fixed the problem and you should be able to save this object now.", vbCrLf))
- End If
- End If
- End If
- Return GetNormalSerializer(manager, value).Serialize(manager, value)
- End Function
- End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement