Serialisieren

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von seh.

    Serialisieren

    Hallo,
    Meine Frage ist wie serialisiert man richtig, dass die Objekte vor und nach dem serialisieren wieder gleich sind
    in meinem Code hab ich die Klasse Person

    VB.NET-Quellcode

    1. <Serializable()>
    2. Public Class Person
    3. Public Name As String
    4. Public MyFriend As Person
    5. Public Sub New(aName As String)
    6. Name = aName
    7. End Sub
    8. End Class


    und auf der Form nur 2 Buttons mit 2 Member in der Form:

    VB.NET-Quellcode

    1. Imports System.IO
    2. Imports System.Runtime.Serialization.Formatters.Binary
    3. Public Class Form1
    4. Private FNm As String
    5. Private ms As MemoryStream
    6. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    7. FNm = Application.ExecutablePath
    8. End Sub
    9. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    10. Dim Pers1 As New Person("Brad Pitt")
    11. Dim Pers2 As New Person("Angi Joli")
    12. Pers1.MyFriend = Pers2
    13. ms = New MemoryStream
    14. Dim b As New BinaryFormatter()
    15. b.Serialize(ms, Pers1)
    16. b.Serialize(ms, Pers2)
    17. Debug.Print(Pers1.Name & " " & Pers2.Name)
    18. Debug.Print(Object.ReferenceEquals(Pers1.MyFriend, Pers2).ToString)
    19. End Sub
    20. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    21. Dim Pers1 As Person
    22. Dim Pers2 As Person
    23. ms.Position = 0
    24. Dim b As New BinaryFormatter()
    25. Pers1 = b.Deserialize(ms)
    26. Pers2 = b.Deserialize(ms)
    27. Debug.Print(Object.ReferenceEquals(Pers1.MyFriend, Pers2).ToString)
    28. End Sub
    29. End Class


    Also ich hab 2 Objekte der Klasse Person, Pers1 hat Pers2 noch als Freund.
    Nach dem Deserialisieren gibt es eine Pers2 und eine andere Person in MyFriend die zwar gleich heißt aber nicht das selbe Objekt ist
    ich möchte es aber so dass nach dem Deserialisieren Pers2 das gleiche Objekt ist wie MyFriend in Pers1

    wie macht man das?
    Danke für alle Antworten

    dingsda

    dingsda schrieb:

    Nach dem Deserialisieren gibt es eine Pers2 und eine andere Person in MyFriend die zwar gleich heißt aber nicht das selbe Objekt ist
    ich möchte es aber so dass nach dem Deserialisieren Pers2 das gleiche Objekt ist wie MyFriend in Pers1
    Hier musst du sorgfältig unterscheiden zwischen der Bedeutung von "dasselbe" und "das gleiche". (Bereits in deiner Fragestellung wirfst du das durcheinander)
    Serialisierung erzeugt niemals dasselbe Objekt, sondern immer nur gleiche Objekte.

    Also je nachdem was du machen willst mag Serialisierung einfach nicht das richtige Instrument sein.
    Es geht einfach um das Abspeichern, also persistieren von Objekten auf Festplatte. Wie macht man das sonst wenn nicht über Serialisieren?
    Es geht mir eigentlich nicht um dieses primitiv Beispiel. dieses Beispiel ist mehr das Parade-Problem aufs wesentliche heruntergebrochen. Es geht darum eine komplexe Objektstruktur beliebiger Software zu speichern, wie machen die Profis das?
    Also ich serialisiere alles in JSON wenn ich nicht umbedingt ein nicht-lesbares Format brauche. Mit einer Zeile serialisierst du ein komplettes Objekt in einen String und speicherst den auf die Platte in ner Datei ab. Und mit einer Zeile lädst du diesen String auch wieder in ein Objekt sodass es genauso aussieht wie vorher. Es ist aber nicht dasselbe Objekt, sondern das gleiche. Einen weiteren Vorteil bietet das ganze, weil du dir das Objekt auch super formatiert in einem Notepad anschauen kannst.

    Zusätzlich dazu kannst du beliebige Member mit einem JsonIgnore() Attribut versehen, sodass dieses Attribut eben bei der Serialisierung nicht berücksichtigt wird. Dieser Member würde dann beim serialisieren/deserialisieren verloren gehen wenn das an Funktionalität gewünscht sei.