Comment rendre une classe serializable
Bonjour à tous,
Je ne parviens pas à sérialiser ma classe et je n'ai aucun message d'erreur, j'espère que vous pourrez m'aider.
Voici ma classe :
Code:
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 56 57 58 59 60 61 62
| <Serializable>
Public Class SetupSys
Private _Sections As New SortedList(Of String, SetupSysKeys)
Public Sub Add(SectionName As String, Keys As SetupSysKeys)
_Sections.Add(SectionName, Keys)
End Sub
Public ReadOnly Property Item(ByVal SectionName As String) As SetupSysKeys
Get
Return _Sections(SectionName)
End Get
End Property
End Class
<Serializable>
Public Class SetupSysKeys
Public Keys As New SortedList(Of String, SetupSysKey)
Public Sub Add(Key As SetupSysKey)
Keys.Add(Key.KeyName, Key)
End Sub
End Class
<Serializable>
Public Class SetupSysKey
Private _KeyName As String
Private _Min As Integer
Private _Max As Integer
Private _Step1 As Integer
Public Sub New(KeyName As String)
_KeyName = KeyName
End Sub
Public Sub New(KeyName As String, Optional Min As Integer = 0, Optional Max As Integer = 0, Optional Step1 As Integer = 0)
Me.New(KeyName)
_Min = Min
_Max = Max
_Step1 = Step1
End Sub
Public ReadOnly Property KeyName() As String
Get
Return _KeyName
End Get
End Property
Public ReadOnly Property Min() As Integer
Get
Return _Min
End Get
End Property
Public ReadOnly Property Max() As Integer
Get
Return _Max
End Get
End Property
Public ReadOnly Property Step1() As Integer
Get
Return _Step1
End Get
End Property
End Class |
Et voici comment je l'utilise :
Code:
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
| Public SetupSys1 As New SetupSys
Private Sub InitSetupData()
Dim Key1 As New SetupSysKey("Clé1", 0, 100, 5)
Dim Key2 As New SetupSysKey("Clé2", 0, 50, 2)
Dim Key3 As New SetupSysKey("Clé3", 0, 30, 1)
Dim Key4 As New SetupSysKey("Clé4", 0, 30, 1)
Dim Keys1 As New SetupSysKeys
Keys1.Add(Key1)
Keys1.Add(Key2)
Keys1.Add(Key3)
Keys1.Add(Key4)
SetupSys1.Add("SysSetup", Keys1)
Call SerializeSysKeys(Application.StartupPath & "\" & SYSSETUP_XML, SetupSys1)
End Sub
Private Sub LoadSetupData()
Dim Clé1Min As Integer = SetupSys1.Item("SysSetup").Keys("Clé1").Min
End Sub
Private Sub SerializeSysKeys(ByVal Path As String, ByVal Objet As Object)
Try
Call SaveXmlData(Path, Objet)
Catch ex As Exception
End Try
End Sub
Private Sub SaveXmlData(ByVal Path As String, ByVal Objet As Object)
Dim Type As Type = Objet.GetType
Dim Serializeur As New XmlSerializer(Type)
Dim Fi As New FileInfo(Path)
If Fi.Directory.Exists = False Then System.IO.Directory.CreateDirectory(Fi.DirectoryName)
'Sérialization
Using fs As New FileStream(Path, FileMode.Create, FileAccess.Write)
Serializeur.Serialize(fs, Objet)
fs.Close()
End Using
End Sub |
PS : Je ne suis qu'au début du codage et la structure de mon fichier XML ainsi que les classes ne sont pas encore figées donc je suis ouvert à toute suggestions.
Le but étant de stocker et récupérer des clés avec des valeurs organisées ainsi un peu à la manière des fichiers INI sauf que les valeurs sont multiples et connues à l'avance (Min, Max, Step1):
[SECTION1]
Clé1: Min=0, Max=100, Step1=5
Clé2: Min=0, Max=50, Step1=2
Clé3: Min=0, Max=30, Step1=1
[SECTION2]
....
De plus je dois pouvoir accéder aux valeurs simplement en utilisant intellisense comme ceci par exemple :
Code:
Dim Clé1Min As Integer = SetupSys1.Item("SysSetup").Keys("Clé1").Min