2016-07-11 3 views
0

Ich bin ein Webdienst, der mehrere Objekte in einer JSON-Zeichenfolge sendet.Deserialisieren mehrerer Objekte in JSON-Zeichenfolge

{ "id": null, "method": "ready", "params": [ {  "accept": 1,  "serial": "001d50101979" }, 
{ 
    "result": { 
    "serial": "001d50101979", 
    "name": "001d50101979", 
    "model": "HMP200", 
    "mode": "normal", 
    "firmware": { 
     "version": "3.2.2-1.0.28801", 
     "status": "normal" 
    }, 
    "uptime": "233.50", 
    "bootid": "e62f7839-95b1-4775-8476-c0b1b5b4857f" 
    }, 
    "error": null, 
    "id": 1231 
} ] } 

Ich verwende die folgenden Klassen

Public Class Firmware 
    Public Property version As String 
    Public Property status As String 
End Class 
Public Class Result 
    Public Property serial As String 
    Public Property name As String 
    Public Property model As String 
    Public Property mode As String 
    Public Property firmware As Firmware 
    Public Property uptime As String 
    Public Property bootid As String 
End Class 
Public Class Param 
    Public Property accept As Integer 
    Public Property serial As String 
End Class 
Public Class Player 
    Public Property id As Object 
    Public Property method As String 
    Public Property params As Param() 
End Class 

Ich habe kein Problem Deserialisieren die Wurzelklasse Player aber ich bin nicht sicher, wie die Klasse Ergebnis deserialisieren.

Dim Player As New Player 
Player = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Player)(JsonString) 
Dim FirmwareVersion As String = Player.id 
Dim bootid As String = Player.method 
Dim Model As String = Player.params(0).accept 
Dim Serial As String = Player.params.ElementAt(0).serial 
+0

Die 'Param' Klasse falsch ist. Es sollte "Ergebnis" enthalten. Führen Sie Ihren Json durch etwas wie json2csharp. –

+0

Param und Ergebnis werden als zwei separate Klassen übergeben. Die Param-Klasse ist in der Player-Klasse enthalten und ich kann darauf zugreifen. Die Ergebnisklasse ist nicht in den Player-Klassen enthalten und ich bin mir nicht sicher, wie ich darauf zugreifen soll. – rick9rick

+0

Wenn ich den JSON durch einen JSON nach C# starte, bekomme ich die folgenden Klassen: – rick9rick

Antwort

1

Ihre Klasse ändern Param zu

Public Class Param 
    Public Property accept As Integer 
    Public Property serial As String 
    Public Property result As Result 
End Class 

dann können Sie Ihre result zugreifen wie so

Dim Player As New Player 
Player = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Player)(JsonString) 
Dim FirmwareVersion As String = Player.id 
Dim bootid As String = Player.method 
Dim Model As String = Player.params(0).accept 
Dim Serial As String = Player.params.ElementAt(0).serial 

For Each p In Player.params 
    If p.result IsNot Nothing Then 
     Console.WriteLine(p.result.model) 
    End If 
Next 
+0

Vielen Dank, dass der Trick gemacht hat. – rick9rick

Verwandte Themen