JSon String - Wie Umsetzen?

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    JSon String - Wie Umsetzen?

    Hey, ich habe solch einen langen JSon-String:

    Spoiler anzeigen
    {
    "playerCredentials": {
    "observerEncryptionKey": "0hJToxCw5TdRxoaNf1bP5Yi2ibN2jpJS",
    "dataVersion": 0,
    "playerId": 28125055,
    "serverPort": 0,
    "observer": true,
    "summonerId": 0,
    "championId": 0,
    "observerServerIp": "95.172.65.26",
    "gameId": 1425324149,
    "observerServerPort": 8088,
    "lastSelectedSkinIndex": 0
    },
    "dataVersion": 0,
    "gameName": "match-1425324149",
    "reconnectDelay": 0,
    "game": {
    "practiceGameRewardsDisabledReasons": {
    "array": []
    },
    "glmSecurePort": 0,
    "queuePosition": 0,
    "playerChampionSelections": {
    "array": [
    {
    "spell1Id": 4,
    "spell2Id": 14,
    "championId": 98,
    "summonerInternalName": "pokingoak",
    "selectedSkinIndex": 0,
    "dataVersion": 0
    },
    {
    "spell1Id": 7,
    "spell2Id": 4,
    "championId": 104,
    "summonerInternalName": "sexdwarf",
    "selectedSkinIndex": 5,
    "dataVersion": 0
    },
    {
    "spell1Id": 4,
    "spell2Id": 14,
    "championId": 25,
    "summonerInternalName": "episnoyz",
    "selectedSkinIndex": 0,
    "dataVersion": 0
    },
    {
    "spell1Id": 4,
    "spell2Id": 3,
    "championId": 412,
    "summonerInternalName": "audragorlen8834",
    "selectedSkinIndex": 0,
    "dataVersion": 0
    },
    {
    "spell1Id": 4,
    "spell2Id": 12,
    "championId": 62,
    "summonerInternalName": "firdra",
    "selectedSkinIndex": 0,
    "dataVersion": 0
    },
    {
    "spell1Id": 4,
    "spell2Id": 14,
    "championId": 103,
    "summonerInternalName": "zoidberg",
    "selectedSkinIndex": 0,
    "dataVersion": 0
    },
    {
    "spell1Id": 4,
    "spell2Id": 11,
    "championId": 5,
    "summonerInternalName": "maufait",
    "selectedSkinIndex": 0,
    "dataVersion": 0
    },
    {
    "spell1Id": 4,
    "spell2Id": 7,
    "championId": 236,
    "summonerInternalName": "slothwithahat",
    "selectedSkinIndex": 0,
    "dataVersion": 0
    },
    {
    "spell1Id": 4,
    "spell2Id": 11,
    "championId": 254,
    "summonerInternalName": "zirnis",
    "selectedSkinIndex": 0,
    "dataVersion": 0
    },
    {
    "spell1Id": 4,
    "spell2Id": 7,
    "championId": 61,
    "summonerInternalName": "bl1zz",
    "selectedSkinIndex": 3,
    "dataVersion": 0
    }
    ]
    }


    und hatte dazu folgende Strukturen (Die Benamungen sind etwas unpassend):

    VB.NET-Quellcode

    1. Public Structure SpectateGame
    2. Public playerCredentials As SpielerDaten
    3. Public dataVersion As Integer
    4. Public gameName As String
    5. Public reconnectDelay As Integer
    6. Public game As GameInformation
    7. End Structure
    8. Public Structure SpielerDaten
    9. Public observerEncryptionKey As String
    10. Public dataVersion As Integer
    11. Public playerId As Integer
    12. Public serverPort As Integer
    13. Public overserver As Boolean
    14. Public summonerId As Integer
    15. Public championId As Integer
    16. Public observerServerIp As String
    17. Public gameId As Integer
    18. Public overserverServerPort As Integer
    19. Public lastSelectedSkinIndex As Integer
    20. End Structure
    21. Public Structure GameInformation
    22. Public practiceGameRewardsDisabledReasons As Arr()
    23. Public glmSecurePort As Integer
    24. Public queuePosition As Integer
    25. Public playerChampionsSelections As AnotherArray()
    26. End Structure
    27. Public Structure AnotherArray
    28. Public spell1Id As Integer
    29. Public spell2Id As Integer
    30. Public championId As Integer
    31. Public summonerInternalName As String
    32. Public selectedSkinIndex As Integer
    33. Public dataVersion As Integer
    34. End Structure
    35. Public Structure Arr
    36. End Structure


    aber die Werte kommen einfach nicht rein..

    Ich versuche Sie so einzusetzen:

    VB.NET-Quellcode

    1. Dim newSummoner as SpectateGame = JsonConvert.DeserializeObject(Of SpectateGame)(e.Result)


    Kann mir einer sagen, was bei den Strukturen fehlt bzw noch ergänz werden müsste?
    Hallo RushDen,

    Die Typen müssen noch die entsprechenden Attribute aufweisen. DataContract für Klassen/Strukturen und DataMember für deren serialisierbaren Member. Das sieht dann in etwa so aus:

    VB.NET-Quellcode

    1. <DataContract(Name:="PlayerCredentials")>
    2. Public Structure PlayerCredentials
    3. <DataMember(Name:="observerEncryptionKey")> Public Property observerEncryptionKey() As String
    4. <DataMember(Name:="dataVersion")> Public Property dataVersion() As Integer
    5. <DataMember(Name:="playerId")> Public Property playerId() As Integer
    6. <DataMember(Name:="serverPort")> Public Property serverPort() As Integer
    7. <DataMember(Name:="observer")> Public Property observer() As Boolean
    8. <DataMember(Name:="summonerId")> Public Property summonerId() As Integer
    9. <DataMember(Name:="championId")> Public Property championId() As Integer
    10. <DataMember(Name:="observerServerIp")> Public Property observerServerIp() As String
    11. <DataMember(Name:="gameId")> Public Property gameId() As Integer
    12. <DataMember(Name:="observerServerPort")> Public Property observerServerPort() As Integer
    13. <DataMember(Name:="lastSelectedSkinIndex")> Public Property lastSelectedSkinIndex() As Integer
    14. End Structure
    15. <DataContract(Name:="PracticeGameRewardsDisabledReasons")>
    16. Public Structure PracticeGameRewardsDisabledReasons
    17. <DataMember(Name:="gameId")> Public Property array() As List(Of Object)
    18. End Structure
    19. <DataContract(Name:="Array")>
    20. Public Structure SpecArray
    21. <DataMember(Name:="spell1Id")> Public Property spell1Id() As Integer
    22. <DataMember(Name:="spell2Id")> Public Property spell2Id() As Integer
    23. <DataMember(Name:="championId")> Public Property championId() As Integer
    24. <DataMember(Name:="summonerInternalName")> Public Property summonerInternalName() As String
    25. <DataMember(Name:="selectedSkinIndex")> Public Property selectedSkinIndex() As Integer
    26. <DataMember(Name:="dataVersion")> Public Property dataVersion() As Integer
    27. End Structure
    28. <DataContract(Name:="PlayerChampionSelections")>
    29. Public Structure PlayerChampionSelections
    30. <DataMember(Name:="array")> Public Property array() As List(Of SpecArray)
    31. End Structure
    32. <DataContract(Name:="Game")>
    33. Public Structure Game
    34. <DataMember(Name:="practiceGameRewardsDisabledReasons")> Public Property practiceGameRewardsDisabledReasons() As PracticeGameRewardsDisabledReasons
    35. <DataMember(Name:="glmSecurePort")> Public Property glmSecurePort() As Integer
    36. <DataMember(Name:="queuePosition")> Public Property queuePosition() As Integer
    37. <DataMember(Name:="playerChampionSelections")> Public Property playerChampionSelections() As PlayerChampionSelections
    38. End Structure
    39. <DataContract(Name:="SpectateGame")>
    40. Public Structure SpectateGame
    41. <DataMember(Name:="playerCredentials")> Public Property playerCredentials() As PlayerCredentials
    42. <DataMember(Name:="dataVersion")> Public Property dataVersion() As Integer
    43. <DataMember(Name:="gameName")> Public Property gameName() As String
    44. <DataMember(Name:="reconnectDelay")> Public Property reconnectDelay() As Integer
    45. <DataMember(Name:="game")> Public Property game() As Game
    46. Public Shared Function FromString(str$) As SpectateGame
    47. 'code
    48. End Function
    49. End Structure

    Grüsse,

    Higlav

    PS: Wie de-/serialisierst du? Ich nutze immer die Funktionalitäten aus dem System.Runtime.Serialization-Namespace(XML, JSON, Soap, Binary).

    RushDen schrieb:

    mit dem generator
    Dir ist aber bewusst, dass da die Struktur der JSon-Datei fix sein muss. Wenn da ein weiterer Eintrag kommt oder einer rausgenommen wird, ist Feierabend.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!