Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[VB.Net] Complex XML bestand deserializen

Pagina: 1
Acties:

  • Mavamaarten
  • Registratie: September 2009
  • Laatst online: 21:57

Mavamaarten

Omdat het kan!

Topicstarter
Hey medetweakers! Ik ben bezig met een GUI voor soundcloud in VB.Net, alleen heb ik last met de XML deserialization.

De XML die ik wil deserializen:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<track>
    <kind>track</kind>
    <id type="integer">70227252</id>
    <created-at type="datetime">2012-12-06T17:41:38Z</created-at>
    <user-id type="integer">808889</user-id>
    <duration type="integer">274415</duration>
    <commentable type="boolean">true</commentable>
    '... stukje tussenuit geknipt ...
    <uri>https://api.soundcloud.com/tracks/70227252</uri>

    <user>
            <id type="integer">808889</id>
            <kind>user</kind>
            <permalink>klrgrm</permalink>
            <username>KLRGRM</username>
            <uri>https://api.soundcloud.com/users/808889</uri>
            <permalink-url>http://soundcloud.com/klrgrm</permalink-url>
            <avatar-url>https://i1.sndcdn.com/avatars-000018815654-3fathe-large.jpg?8e879e6</avatar-url>
    </user>

    <user-playback-count type="integer">1</user-playback-count>
    <user-favorite type="boolean">true</user-favorite>
     '... nog een hoop rommel ...
</track>


Ik heb dus een class User en een class Track:
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Public Class User
      <DataMember(Name:="id")>
      Public Property id As Integer
      <DataMember(Name:="kind")>
      Public Property kind As String
      <DataMember(Name:="permalink")>
      Public Property permalink As String
      <DataMember(Name:="username")>
      Public Property username As String
      <DataMember(Name:="uri")>
      Public Property uri As String
      <DataMember(Name:="permalink_url")>
      Public Property permalink_url As String
      '... je snapt het idee wel)


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
<XmlRoot("track")>
Public Class Track
      <DataMember(Name:="id")>
      Public Property id As Integer
      <DataMember(Name:="created_at")>
      Public Property created_at As String
      <DataMember(Name:="user_id")>
      Public Property user_id As String
      <DataMember(Name:="duration")>
      Public Property duration As Integer
      <DataMember(Name:="commentable")>
      Public Property commentable As String
      <DataMember(Name:="state")>
      Public Property state As String
      <DataMember(Name:="sharing")>
      Public Property sharing As String
      <DataMember(Name:="tag_list")>

      <DataMember(Name:="user")>
      Public Property user As User

      'Ook hier snap je het idee wel...


Je ziet het probleem waarschijnlijk al wel aankomen. Hoe kan ik dit fatsoenlijk deserializen?
Dit is de code die ik momenteel gebruik en dat werkt prima als ik de "user" property eruit laat. Natuurlijk is die wel belangrijk 8)7

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Function ParseTrack(ByVal XML As String) As Track
      Dim track As Track = Nothing
      Dim encoding As New System.Text.UTF8Encoding
      Dim bytes() As Byte = encoding.GetBytes(XML)

      Using os As New MemoryStream
                  os.Write(bytes, 0, bytes.Length)
                  os.Position = 0
                  track = CType(New XmlSerializer(GetType(Track)).Deserialize(os), Track)
      End Using

      Return track
End Function


Misschien geen onbelangrijk detail, in de XML staan niet alle properties van User. Is het daarom dat ik een "{"Unexpected end tag. Line 78, position 3."}" error krijg? Alle hulp is welkom, ik ben radeloos en google helpt me niet :-(

EDIT: Derp, antwoord zelf al gevonden. Heb het user deel er uitgeplukt en apart gedeserialized.

[ Voor 4% gewijzigd door Mavamaarten op 10-12-2012 19:28 ]

Android developer & dürüm-liefhebber


  • BasieP
  • Registratie: Oktober 2000
  • Laatst online: 19-10 08:18
en heeft dat antwoord betrekking op een XmlReader ?

This message was sent on 100% recyclable electrons.