Objekt serialisieren

Alle Fragen zur Programmierung, die nicht in die speziellen Themen passen
Antworten
Mentalist
Foriker
Beiträge: 2
Registriert: Mi 19. Feb 2020, 07:56
Kontaktdaten:

Objekt serialisieren

Beitrag von Mentalist » Mi 19. Feb 2020, 08:12

Hallo,

ich verwende Gambas 3.14.90 und versuche Objekte zu serialisieren. Bisher vergeblich :(

Hierzu habe ich in etwa folgendes Objekt
gambas code
Property Name As String
Private _name As String
Private Function Name_Read() As String
  Return _name
End
Private Sub Name_Write(Value As String)
  _name = Value
End
Public Sub _read(stream As Stream)
  _name = Read #stream As String
End
Public Sub _write(stream As Stream)
  Write #stream, _name As String
End
Beim Speichern gehe ich folgendermaßen vor:
gambas code
Dim hFile As File
Dim item As MyObject
item = New MyObject
hFile = Open _fileName For Output Create
Write #hFile, item As MyObject
Close #hFile
Bis hierhin scheint es zu funktionieren. Zumindest entsteht eine Datei mit einem anscheinend passenden Inhalt.

Wenn ich nun versuche dieses Objekt wieder zu deserialisieren mit folgendem Code
gambas code
Dim hFile As File
Dim item As MyObject
If Not Exist(_fileName) Then Return
hFile = Open _filename For Input
item = Read #hfile As MyObject
Close #hfile
erhalte ich einen "Speicherzugriffsfehler (11)" bei der Read-Anweisung.

Ich finde keine Beispiele und auch in der Dokumentation wird dies nicht wirklich beschrieben. Es finden sich allerdings in der Doku bei den zu verwendenden Funktionen ( _read, _write ) teilweise Hinweise auf eine Version 3.15

Meine Frage nun: Hat schon mal jemand Objekte serialisiert und deserialisiert und kann mir hierfür ein kleines Beispiel liefern, bzw. was hat es mit dieser Version 3.15 auf sich. Wo bekomme ich die her?

Schon mal vielen Dank für eure Hilfe.

gambasso
Foriker
Beiträge: 1110
Registriert: Sa 17. Mär 2012, 09:55
Kontaktdaten:

Re: Objekt serialisieren

Beitrag von gambasso » Do 20. Feb 2020, 10:51

moin,

damit habe habe ich noch nie was gemacht. Ich speicher bisher alles auf alte, gewohnte Weise.

Mehr kann ich Dir nicht anbieten. Schau mal hier: https://www.gambas-buch.de/doku.php?id= ... ialisieren
Gruss

Benutzeravatar
tionov
Site Admin
Beiträge: 366
Registriert: So 18. Mai 2014, 22:40
Kontaktdaten:

Re: Objekt serialisieren

Beitrag von tionov » Do 20. Feb 2020, 11:44

Serialisieren heißt im Prinzip, aus einem Objekt einen String zu machen, den man dann beliebig weitergeben oder speichern kann. Relativ gut eignet sich dafür JSON, zumindest kann man damit die notwendigsten Datentypen serialisieren. Ich hänge dir eine Beispiel an, hab das auch gerade in die Software Farm hochgeladen,weil die Frage kommt öfter mal.

Die Klasse, mit der das realisiert wird, heißt CModel und ein Model, das Daten speichern soll, muss von ihr erben. Die Klasse kann übrigens noch etwas mehr, als nur Daten speichern, sie kann auch einen Hash ihres derartigen Zustandes ausgeben. Das ist nützlich, um zu erkennen, ob sich die Inhalte im Vergleich zu einem vorigen Zustand geändert haben.

-->
SerializeModel-1.0.2.tar.gz
(13.12 KiB) 35-mal heruntergeladen
Alles Gute,

tionov

Mentalist
Foriker
Beiträge: 2
Registriert: Mi 19. Feb 2020, 07:56
Kontaktdaten:

Re: Objekt serialisieren

Beitrag von Mentalist » Sa 22. Feb 2020, 21:00

Hallo tionov,

ist zwar ein anderer Ansatz als meiner, aber wesentlich besser!
Es ist besser wenn die Objekte nicht direkt irgendwohin speichern wie bei mir, sondern lieber Ihre Daten in einem standardisierten Format liefern. Für die Speicherung ist dann jemand anderes zuständig. Gefällt mir sehr gut. Vor allem die Dynamik über "Symbols" hat was. So kann man leicht seine Klassen ändern ohne an der Serialisierung zu ändern.

Werde ich mal so in meinen Code einbauen.

Vielen Dank!

Benutzeravatar
tionov
Site Admin
Beiträge: 366
Registriert: So 18. Mai 2014, 22:40
Kontaktdaten:

Re: Objekt serialisieren

Beitrag von tionov » Sa 22. Feb 2020, 22:33

Gerne und danke!

Diese Klasse CModel ist in meinen Programmen Basis für ein ORM, ich benutze sie hauptsächlich, um Zeilen von Datenbanktabellen darzustellen und im Programm verfügbar zu machen. Die Serialisierung ist eigentlich nur ein Nebenprodukt, aber ich benutze Models mit Serialisierung inzwischen auch an Stellen, an die ich vorher nie gedacht hätte, z.B. bei Drag und Drop.

Speichern kannst du den String einfach mit File.Save(Path, Data), aber das ist dir sicher bewusst.
Alles Gute,

tionov

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste