JSON Deserialisieren - Eigene Klasse

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Rootbob91.

    JSON Deserialisieren - Eigene Klasse

    Hallo,

    ich habe mir mal die Doku von JSON.NET angeschaut (ich bin gerade auch ein bisschen verwirrt, dass ist doch die Klasse, die man via System.Web.Extensions holt??).


    Nun versuche ich die Beispielklasse von der Seite nachzubauen und zu deserialisieren:
    Klasse Product

    VB.NET-Quellcode

    1. // <Serializable> _ ?
    2. Public Class Product
    3. Sub New()
    4. End Sub
    5. Public Property Name As String
    6. Public Property ExpiryDate As Date
    7. Public Property Price As Decimal
    8. Public Property Sizes As Integer
    9. End Class


    Code

    VB.NET-Quellcode

    1. Dim jsonSerializer As New System.Web.Script.Serialization.JavaScriptSerializer
    2. Dim json As String = "[{'Name': 'Product 1','ExpiryDate': '2000-12-29T00:00Z','Price': 99.95,'Sizes': 5},{'Name': 'Product 2','ExpiryDate': '2009-07-31T00:00Z','Price': 12.50,'Sizes': 10}]"
    3. Dim products As List(Of Product) = jsonSerializer.DeserializeObject(Of List(Of Product))(json)
    4. Debug.WriteLine(products.Count)
    5. Dim p1 As Product = products(0)
    6. Console.WriteLine(p1.Name)


    Und der Fehler im Bild:
    Bilder
    • json error.png

      3,52 kB, 717×57, 112 mal angesehen
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Rootbob91“ ()

    Na, Du hast keine Typaparameter drin, sondern nen String. Wieso rufst Du dann mit nem Typargument auf?
    Ich würde sowieso sagen, dass Du nen ​JavaScriptSerializer verwendest, ist imo am Einfachsten.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Soweit ich das verstanden habe, oder sehe^^.. Verwende ich diesen dafür.

    Allerdings verstehe ich den Code mit dem Of gewurschtel in Zeile 3 nicht :/.
    Das ist das sample von der Doku, überestzt in VB-Code, bis auf das ich die Klasse natürlich hinzugefügt habe.

    Hab extra den leeren Konstruktor mit angegeben.
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    Oh fail, hatte ich nicht gesehen. Na, Du musst zum Deserialisieren nen Typen angeben.
    ​Of T steht immer für ein Typargument, das Ganze nennt man auch Generika, das sind einfach Platzhalter für Datentypen.

    Sagen wir Du hast nen String und willst die Bestandteile in Deine Klasse deserialisieren.
    Dann machste sowas: ​serializer.Deserialize(Of MyClass)(serializedString).

    So müsste es in VB.NET sein, das Äquivalent in C# wäre dabei btw: ​serializer.Deserialize<MyClass>(serializedString);
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Kein Ding^^..

    Joar, des hab i hier gemacht :)

    VB.NET-Quellcode

    1. Dim products As List(Of Product) = jsonSerializer.DeserializeObject(Of List(Of Product))(json)


    Im serialisierten String steht:

    VB.NET-Quellcode

    1. Dim json As String = "[{'Name':'Product 1','ExpiryDate': '2000-12-29T00:00Z','Price': 99.95,'Sizes':5},{'Name': 'Product 2','ExpiryDate': '2009-07-31T00:00Z','Price':'12.50,'Sizes': 10}]"


    Und dann kommt der Fehler im obigen Bild, wo ich nicht verstehe was er will, bzw. was ich ändern muss.
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    Du nutzt auch die falsche Methode. Du brauchst ​Deserialize(Of T), nicht ​DeserializeObject, denn das konvertiert das in ein Objektdiagramm.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Oh Gott das gibts nicht, hat geklappt :))!!

    Danke!

    Stand halt in der Doku so, unter "Deserializing Collections":

    C#-Quellcode

    1. List<Product> products = JsonConvert.DeserializeObject<List<Product>>(json);
    Polling is trolling!

    Achtung: Ich habe die komische Angewohnheit, simple Dinge zu verkomplizieren..
    Du wirfst da einiges durcheinander :) Der von dir gepostete Link enthält die Doku zu der Library Json.Net, du nutzt aber JavaScriptSerializer (nicht verwechseln mit DataContractJsonSerializer).

    Weitere Infos findest du in MSDN:
    System.Web.Script.Serialization.JavaScriptSerializer
    System.Runtime.Serialization.Json.DataContractJsonSerializer