vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Blitzschnelles Erstellen von grafischen Diagrammen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Fortgeschrittene
Re: Antwort Teil 1 
Autor: ModeratorDaveS (Moderator)
Datum: 05.12.02 13:43

Hi Vampire666,

(die Nachricht ist zu lang? was soll das denn??)

ich danke dir für deine Mühe, aber so weit (mindestens!) war ich schon. Aber anhand deines Beispiels kann ich vielleicht klarer erklären worum es geht.

Erstens will ich ein Array serialisieren, das ginge z.B. so:
  ' Array of customer
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Button2.Click
        ' XmlSerializer Object erstellen für die KLasse
        Dim ser As New XmlSerializer(GetType(Customer())) 
        'nun ein Objekt erstellen für die Klasse Customer
 
        Dim acust() As Customer = {New Customer(1, "Vampire", Nothing, _
          "Mannheim"), _
                                        New Customer(2, "DaveS", Nothing, _
                                        "München")}
 
 
        ' Datei öffnen
        Dim fs As New FileStream("c:\customer.xml", FileMode.Create)
        'Das Object in den Stream serialisieren und schließen
        ser.Serialize(fs, acust)
        fs.Close()
 
        'Stream nochmal öffnen
        Dim fs2 As New FileStream("c:\customer.xml", FileMode.Open)
        ' Deserialize die Datei in ein andere Customer Object und danach wieder 
        ' schließen
        Dim acust2() As Customer = CType(ser.Deserialize(fs2), Customer())
        fs2.Close()
        'Prüfe die Eigenschaften
        MsgBox(acust2(0).Name & ", " & acust2(0).City + vbCrLf + _
             (acust2(1).Name & ", " & acust2(1).City))
 
    End Sub
Das bringt als xml

<?xml version="1.0"?>
<ArrayOfCustomer xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Customer>
<ID>1</ID>
<Name>Vampire</Name>
<City>Mannheim</City>
</Customer>
<Customer>
<ID>2</ID>
<Name>DaveS</Name>
<City>München</City>
'</Customer>
'</ArrayOfCustomer>

Allerdings will ich "CustomerItems" anstatt "ArrayOfCustomer" und "Item" anstatt "Customer" (es geht darum , dass wir Klassen haben mit langen Namen die als Web Requests geschickt werden sollen, und ich will die Klassen nicht umbenennen, um das die Daten wesentlich kurzer werden).

Ich kann zwar den Rootnamen ändern mit

Dim ser As New XmlSerializer(GetType(Customer()), New XmlRootAttribute("CustomerItems"))

aber nicht <Customer>

Mit einer Klasse wie

Imports System.Xml.Serialization
 
Public Class Customers
 
    <XmlArray("CustomerItems"), _
    XmlArrayItem("Item")> _
    Public acust() As Customer 
 
    Public Sub New(ByVal init As Boolean)
        If init Then
            acust = New Customer() {New Customer(1, "Vampire", Nothing, _
              "Mannheim"), _
                                    New Customer(2, "DaveS", Nothing, _
                                    "München")}
        End If
    End Sub
 
End Class
kann ich die Attribute XmlArray und XmlArrayItem benutzen, und mit folgendem Code

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As _
      System.EventArgs) Handles Button3.Click
        ' XmlSerializer Object erstellen für die KLasse
        Dim ser As New XmlSerializer(GetType(Customers))
        'nun ein Objekt erstellen für die Klasse Customer
 
        Dim custs As New Customers(True)
 
        ' Datei öffnen
        Dim fs As New FileStream("c:\customer.xml", FileMode.Create)
        'Das Object in den Stream serialisieren und schließen
        ser.Serialize(fs, custs)
        fs.Close()
 
        '<?xml version="1.0"?>
 
        'Stream nochmal öffnen
        Dim fs2 As New FileStream("c:\customer.xml", FileMode.Open)
        ' Deserialize die Datei in ein andere Customer Object und danach wieder 
        ' schließen
        Dim custs2 As Customers = CType(ser.Deserialize(fs2), Customers)
        fs2.Close()
        'Prüfe die Eigenschaften
        MsgBox(custs2.acust(0).Name & ", " & custs2.acust(0).City + vbCrLf + _
             (custs2.acust(1).Name & ", " & custs2.acust(1).City))
    End Sub
habe ich dann dieses Ergebnis:

<Customers xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<CustomerItems>
<Item>
<ID>1</ID>
<Name>Vampire</Name>
<City>Mannheim</City>
</Item>
<Item>
<ID>2</ID>
<Name>DaveS</Name>
<City>München</City>
</Item>
</CustomerItems>
</Customers>

Erfolg!
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
XmlSerializer919ModeratorDaveS04.12.02 15:07
Also...464ModeratorDaveS04.12.02 15:10
Re: XmlSerializer487Vampire66604.12.02 15:22
Re: XmlSerializer573ModeratorDaveS04.12.02 15:34
Re: XmlSerializer464Vampire66604.12.02 15:58
Re: XmlSerializer582ModeratorDaveS04.12.02 16:08
Re: XmlSerializer490Vampire66605.12.02 11:24
Serialisieren und Deserialisieren ist dabei !!!!484Vampire66605.12.02 11:28
Re: Antwort Teil 1606ModeratorDaveS05.12.02 13:43
Re: Antwort Teil II480ModeratorDaveS05.12.02 13:44
noch nix gefunden545Vampire66605.12.02 14:18

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel