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:
Ik heb dus een class User en een class Track:
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
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.
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
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