[VB/C#] JSON Deserialization

Impi2k

Mitglied
Hallo Community,
ich versuche zur Zeit eine API zu nutzen, die mir ein in JSON codierten String zurückliefert, der wie folgt aussieht:
Code:
{"list":[{"model.Object":{"id":1,"name":"das ist ein test","datum":{"@class":"sql-timestamp","$":"2011-01-20 14:02:52.0"},"aktiv":false}}]}

Ich komme beim deserialisieren an zwei Stellen nicht weiter, die meiner Meinung nach aber den gleichen Ursprung haben. Und zwar kann ich ja keine Property namens "model.Object" erstellen, weil Umlaute (in diesem Falle der Punkt) nicht als Property-Name erlaubt sind. Gleiches Problem stellt sich beim Value des Keys "datum". Eine Property mit dem Namen "@class" und "$" - geht nicht. Jetzt habe ich gelesen, dass man mit DataMemberAttributen solche Probleme lösen kann (http://msdn.microsoft.com/de-de/library/system.runtime.serialization.datamemberattribute.aspx). Allerdings bekomme ich das nicht zum Laufen, meine Klasse für "model.Object" würde so aussehen:

Code:
Imports System.Runtime.Serialization
<DataContract()> _
Public Class getResponseModelObject
    <DataMember(Name:="model.Object")> _
    Public Property modelObject() As getResponseObject()
        Get
            Return m_modelObject
        End Get
        Set(ByVal value As getResponseObject())
            m_modelObject= value
        End Set
    End Property
    Private m_modelObject As getResponseObject()
End Class

Leider funktioniert das nicht. :( Bin ich mit <DataMember(Name:="model.Object")> komplett auf dem Holzweg oder mache ich einfach nur etwas falsch? Ich würde mich freuen, wenn mir jemand bei meinem Problem helfen kann! Vielen Dank schon einmal.
 
Hi,

gibt es einen Grund warum du deine Objekte/Listen etc. nicht über den JavaScriptSerializer aus dem .NET-Framework in JSON serializierst/deserialisierst, sondern es selber implementieren möchtest?

Gruß
RudolfG
 
Hallo RudolfG!

Ich arbeite bereits mit JavaSriptSerializer:
Code:
            Dim serializer As New JavaScriptSerializer()
            serializer.MaxJsonLength = data.Length

            Dim dataObject As getResponseList = serializer.Deserialize(Of getResponseList)(data)
            Dim objects As getResponseObject() = dataObject.list(0).modelObject
            Dim list As New List(Of getResponseObject)
            For Each obj As getResponseObject In objects
                list.Add(obj)
            Next
            Me.DataGridView1.DataSource = list
 
Ich habe mich noch nie mit dem JavaScriptSerializer beschäftigt. Wenn mein Beitrag daher unqualifiziert ist, dann bitte einfach ignorieren :)
Aber MSDN sagt mir:
Um Typen zu serialisieren und zu deserialisieren, für die keine systemeigene Unterstützung durch JavaScriptSerializer besteht, implementieren Sie mithilfe der JavaScriptConverter-Klasse benutzerdefinierte Konverter. Registrieren Sie die Konverter dann mit der RegisterConverters-Methode.
Hast du dir den JavaScriptConverter mal angeschaut?
 
Nein, die kannte ich noch nicht. Schaue mir mal an, ob das für meine Zwecke ausreicht. Vielen Dank schon mal an der Stelle!
 
Je nach der verwendeten Framework Version kannst du auch den JsonSerializer verwenden.ich glaube ab 3.5 ist er mit dabei. An Sonaten Suche mal nach .Net Json, da wirst du ein eine ganze Menge zu finden.
 
Zurück