Toon posts:

[VB.NET] Serializeren van Controls

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb me proberen te verdiepen in het Serialisatie gebeuren, en op zich snap ik de werking ervan wel. Alleen wat ik niet snap is wrom ik geen Buttons, TextFields, etc. kan serializen?

Mijn gedachte was, dat ik die controls niet kon serializen, omdat deze niet als serializable zijn gedeclareerd. Maar ja, wat moet je hier dan aan doen?


Ik probeer het nu met de volgende TEST code:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim btnTest As New Button()

With btnTest

        .Name = "Button1"
        .Text = "Test"
        .Location = New Point(10, 10)
        .BackColor = Color.Aqua

End With

Dim savefile As FileStream
saveFile = File.Create("testSave.txt")

Dim bf As New Binary.BinaryFormatter()
bf.Serialize(saveFile, btnTest)

saveFile.Close()


Deze code geeft de volgende error, zodra ik wil gaan serializen:

code:
1
2
3
4
5
6
7
8
An unhandled exception of type:  
System.Runtime.Serialization.SerializationException' occurred in mscorlib.dll

Additional information: 
The type System.Windows.Forms.Button in Assembly System.Windows.Forms, 
    Version=1.0.3300.0, 
    Culture=neutral, 
    PublicKeyToken=b77a5c561934e089 is not marked as serializable.


Kan iemand mij vertellen hoe ik het serializen van controls TOCH kan realiseren?

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:10
Je kan een nieuwe class maken die je overerft van die control en de ISerializable interface implementeren.

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 18 november 2003 @ 13:44:
Je kan een nieuwe class maken die je overerft van die control en de ISerializable interface implementeren.
OK, dit begint er al meer op te lijken! Maar ik moet nu
Visual Basic .NET:
1
2
3
Public Sub GetObjectData(ByVal info As System.Runtime.Serialization.SerializationInfo, _
ByVal context As System.Runtime.Serialization.StreamingContext) _
Implements System.Runtime.Serialization.ISerializable.GetObjectData

gaan overriden.

Heeft iemand hier misschien een voorbeeld van, met enige uitleg?

[ Voor 44% gewijzigd door Verwijderd op 18-11-2003 16:44 ]


Verwijderd

Topicstarter
OK, ik heb het al opgelost! En wel als volgt:

Visual Basic .NET:
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
Imports System.Runtime.Serialization

<Serializable()> Public Class extraButton
    Inherits System.Windows.Forms.Button
    Implements ISerializable

    Public Sub New()
        Me.Location = New Point(10, 10)
        Me.Width = 100
        Me.Height = 20
        Me.Text = "Button1"
        Me.Name = "Button1"
    End Sub

    Public Sub New(ByVal info As SerializationInfo, ByVal context As _ 
                                                  StreamingContext)
        Me.Location = New Point(info.GetInt32("x"), info.GetInt32("y"))
        Me.Width = info.GetInt32("width")
        Me.Height = info.GetInt32("height")
        Me.Text = info.GetString("text")
        Me.Name = info.GetString("name")
    End Sub

    Public Sub GetObjectData(ByVal info As SerializationInfo, ByVal context As _
                    StreamingContext) Implements ISerializable.GetObjectData
        With info
            .AddValue("x", Me.Location.X)
            .AddValue("y", Me.Location.Y)
            .AddValue("width", Me.Width)
            .AddValue("height", Me.Height)
            .AddValue("text", Me.Text)
            .AddValue("name", Me.Name)
        End With
    End Sub

End Class


Dit zorgt er dus voor dat ik kan serialiseren en deserialiseren! En dit werkt prima, bij een Binary Formatter, en een SOAP Formatter!

Maar deze twee formatters, genereren een file, die ik niet echt zelf kan "controleren".

Ik wil graag zelf me XML aanmaken, van de serialisatie! Nu weet ik dat dit kan via XMLserialisation!

Maar hoe ik dat doe, weet ik (nog) niet! Oftewel alle hulp is welkom, en links naar HOWTO's natuurlijk ook! (ben nu bezig met zoeken, maar ik dacht laten we vast posten dat ik vorige probleem al heb opgelost! :D)

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:10
Verwijderd schreef op 19 november 2003 @ 14:47:

Maar deze twee formatters, genereren een file, die ik niet echt zelf kan "controleren".

Ik wil graag zelf me XML aanmaken, van de serialisatie! Nu weet ik dat dit kan via XMLserialisation!

Maar hoe ik dat doe, weet ik (nog) niet! Oftewel alle hulp is welkom, en links naar HOWTO's natuurlijk ook! (ben nu bezig met zoeken, maar ik dacht laten we vast posten dat ik vorige probleem al heb opgelost! :D)
Hmmm, ik heb daar geen ervaring mee, maar ik vermoed dat je je eigen 'custom-formatter' class zult moeten schrijven dan, die de IFormatter interface (en de IRemottingFormatter) implementeert

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 19 november 2003 @ 14:56:
[...]


Hmmm, ik heb daar geen ervaring mee, maar ik vermoed dat je je eigen 'custom-formatter' class zult moeten schrijven dan, die de IFormatter interface (en de IRemottingFormatter) implementeert
Ah ja, weer wat meer woorden om op te zoeken bij google, althans dat geld dan voor IRemotingFormatter. :D

Ik laat wel weer weten, als ik wat verder ben dan ik nu ben! :)

Verwijderd

Topicstarter
OK, ik heb dus uitgevonden hoe men een Class kan serialiseren via XMLserializer!

Het is op zich helemaal niet zo moeilijk, maar je moet het maar net ff weten! :+

Iig, ik doe het op de volgende manier:

code:
1
2
3
4
5
6
7
8
        Dim saveFile As FileStream
        saveFile = File.Create("testtest.txt")

        Dim formatter As New Xml.Serialization.XmlSerializer(GetType(Persoon))
        formatter.Serialize(saveFile, pers)

        saveFile.Flush()
        saveFile.Close()


En de klasse persoon is niks anders dan, private declaraties van zaken zoals voornaam, achternaam, postcode, woonplaats, etc. Met natuurlijk de bijbehorende public property's om te setten en te getten!

De "gegenereerde" XML file ziet er dan als volgt uit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0"?>
<Persoon xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <voornaam>Oma</voornaam>
  <tussenvoegsel>'t</tussenvoegsel>
  <achternaam>Grutje</achternaam>
  <straatnaam>OuweLulleLaan</straatnaam>
  <huisnummer>11</huisnummer>
  <huisnummerToevoeging>a</huisnummerToevoeging>
  <postcode>1232 KL</postcode>
  <woonplaats>Amsterdam</woonplaats>
</Persoon>


Je kan hier in de klasse nog allerlei dingen aangeven, hoe je het zou willen hebben in XML. Dus je kan bijvoorbeeld aangeven dat je voornaam, tussenvoegsel en achternaam als attribute wil hebben van het element Naam.

Dat is allemaal niet zo'n probleem, en ga ook niet verder uitleggen hoe je dat zou moeten doen (als je echt wil weten, mail me dan ofzo), want nu komt het probleem wat ik ondervind!

HET PROBLEEM:
Ik heb nu een leuke ArrayList met allemaal instanties van Persoon erin, nu wil ik deze serialiseren via XML, maar daar gaat ie fout op. Ik krijg dan de error:

code:
1
2
3
An unhandled exception of type 'System.InvalidOperationException' occurred in system.xml.dll

Additional information: There was an error generating the XML document.


DIt slaat naar mijn weten zekers te weten op die arrayList, maar ik weet dan weer niet hoe ik dit zou moeten fixen.

De GOT Search hiero, levert ALLEEN dit topic op over serialisatie, en google geeft allemaal links over SOAPserialisatie, en de andere links zijn niet wat ik wil hebben, want daarin sta alleen wat ik net heb gezegd!

Kan iemand mij helpen?

[ Voor 8% gewijzigd door Verwijderd op 21-11-2003 10:48 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 11:10
Een formatter moet in staat zijn om een 'graaf' van objecten te kunnen opslaan.

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 21 november 2003 @ 10:55:
Een formatter moet in staat zijn om een 'graaf' van objecten te kunnen opslaan.
Hoe bedoel je? ZOu je dat kunnen toelichten?

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:10
Een 'graaf' van objecten is reeks objecten.

Trouwens, debug je code eens en kijk eens waar je die exception op krijgt.

https://fgheysels.github.io/

Pagina: 1