Json Serialization für Arrays

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

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Haudruferzappeltnoch.

    Json Serialization für Arrays

    Hallo,

    ich nutze den JsonSerializer um Json Antworten eines Server in Objekte umzuwandeln.

    VB.NET-Quellcode

    1. Using strm = New IO.MemoryStream(Encoding.UTF8.GetBytes(testJsonString))
    2. Dim result = JsonSerializer.Deserialize(Of Response)(strm, standardoptions)
    3. End Using
    Das funktioniert aber nicht, wenn ein Array an Elementen bspw. $"[{testJsonString},{testJsonString}]" zurückkommt.

    Falls die Methode DeserializeAsyncEnumerable hierfür vorgesehen ist, kann ich sie scheinbar nicht richtig nutzen, ich kriege da auch nur Nothing zurück.

    Viele Grüße
    Na Moment. Steckt denn manchmal ein Response-Array und manchmal ein nur einzelnes Response-Objekt drin?
    Ein Response-Array kann natürlich nicht in ein Response-Objekt gewandelt werden. Ich hab das Problem bei mir insofern nicht, dass ich immer ein DataContainer-Objekt benutze, welches als Properties ggf. verschiedene Listen hat. Ich (de)serialisiere also immer nur ein Objekt - in dem alles drinsteckt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Der Serializer versteht das wohl, aber du musst natürlich in deinem Programm den richtigen Datentypen erwarten. Ansonsten müsstest du ​JsonSerializer.Deserialize(Of Response)(strm, standardoptions)(0) z.B. eingeben.
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.
    Das kann ja nur in die Hose gehen. Wenn bei (Of Response) ein einzelner Wert zurückkommt, dann wirds kein Array, daher kein Item(0) und wenn ein Array kommt, dann passts mit Response weiterhin nicht.
    Ich muss dynamisch den Typ ändern von Einzelwert zu Liste. Bzw ich habe jetzt die Request so abgeändert, dass nun immer ein Array zurückkommt auch wenn es nur einen Wert enthält, ich also immer mit Response() arbeiten kann
    Ja, genau. Du musst in deinem Code schon ein Array oder eine Liste, o.Ä. erwarten - sonst kriegst du halt einen Fehler.

    Dein Quellcode oben:

    VB.NET-Quellcode

    1. ​Dim result = JsonSerializer.Deserialize(Of Response)(strm, standardoptions)


    erwartet halt ein einzelnes Objekt vom Typ ​Response
    Dim result = JsonSerializer.Deserialize(Of Response)(strm, standardoptions)[/list]
    Quellcode lizensiert unter CC by SA 2.0 (Creative Commons Share-Alike)

    Meine Firma: Procyon Systems

    Selbstständiger Softwareentwickler & IT-Techniker.