1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| Option Explicit On
Option Strict On
Imports System.ComponentModel.Design.Serialization
Imports System.CodeDom
Public Class ControleSerializer
Inherits CodeDomSerializer
Public Overrides Function Serialize(ByVal manager As IDesignerSerializationManager, ByVal value As Object) As Object
Dim propriete As CodeFieldReferenceExpression
Dim lignesCode As CodeStatementCollection
Dim serialiseur As CodeDomSerializer
Dim codeObject As Object
' Récupère le sérialiseur de l'objet.
serialiseur = CType(manager.GetSerializer(GetType(Controle).BaseType, GetType(CodeDomSerializer)), CodeDomSerializer)
' Sérialise l'objet de base.
codeObject = serialiseur.Serialize(manager, value)
' Crée une collection de lignes de code si besoin.
If codeObject Is Nothing Then : lignesCode = New CodeStatementCollection
Else : lignesCode = DirectCast(codeObject, CodeStatementCollection)
End If
' Sérialise la propriété 'Attribut.Entier'.
propriete = New CodeFieldReferenceExpression(New CodeThisReferenceExpression, manager.GetName(value))
propriete = New CodeFieldReferenceExpression(propriete, "Attribut")
propriete = New CodeFieldReferenceExpression(propriete, "Entier")
lignesCode.Add(New CodeAssignStatement(propriete, New CodePrimitiveExpression(DirectCast(value, Controle).Attribut.Entier)))
' Sérialise la propriété 'Attribut.Chaine'.
propriete = New CodeFieldReferenceExpression(New CodeThisReferenceExpression, manager.GetName(value))
propriete = New CodeFieldReferenceExpression(propriete, "Attribut")
propriete = New CodeFieldReferenceExpression(propriete, "Chaine")
lignesCode.Add(New CodeAssignStatement(propriete, New CodePrimitiveExpression(DirectCast(value, Controle).Attribut.Chaine)))
' Retourne le code de l'objet sérialisé.
Return lignesCode
End Function
Public Overrides Function Deserialize(ByVal manager As IDesignerSerializationManager, ByVal codeObject As Object) As Object
Dim serialiseur As CodeDomSerializer
' Récupère le sérialiseur de l'objet.
serialiseur = CType(manager.GetSerializer(GetType(Controle).BaseType, GetType(CodeDomSerializer)), CodeDomSerializer)
' Désérialise l'objet.
Return serialiseur.Deserialize(manager, codeObject)
End Function
End Class |
Partager