2012-04-05 14 views
0

Ich habe ein JSON-Objekt, das so aussieht.Benutzerdefiniertes JSON-Objekt in ein VB.NET-Objekt konvertieren

{ 
"Errors":{ 
    "err1":[ 
    //* Array of err1 objects 
    ], 
    "err2":[ 
    //* Array of err2 objects 
    ] 
} 
} 

Ich verwende dieses Objekt, um Fehler, die bei einer Anfrage auf einer PHP-Seite gefunden wurden, zu melden.

ich das Objekt zu einem vb.Net Objekt konvertieren möchten erklärt im Wesentlichen wie folgt:

Public Class WebErrContainer 
    Public Errors as List(Of IWebError) 
End Class 

Public Class Err1 
    Implements IWebError 
End Class 

Public Class Err2 
    Implements IWebError 
End Class 

Public Interface IWebError 
End Interface 

Ich weiß nicht, ob meine Implementierung ist gut genug, ich bin relativ neu so VB.NET Meine Fähigkeiten in OOP sind momentan etwas niedrig.

Das ist es ... ich denke, ich habe die Situation so gut erklärt, wie ich konnte.

Wenn Sie weitere Informationen benötigen, werde ich es geben.

Vielen Dank im Voraus für jede Hilfe, die Sie geben könnten. Vielen Dank.

PD: Ich verwende derzeit die JSON.Net-Bibliothek von Newtonsoft. Fühlen Sie sich frei, eine andere Bibliothek oder Methode zu empfehlen, mit JSON in VB.NET umzugehen.


löste ich die Situation dies tun:

Public Sub New(ByVal jsonText As String) 
    Dim jObject As JObject = jObject.Parse(jsonText) 
    Dim jErrors As JToken = jObject("Errors") 
    Dim jS = New JsonSerializer() 

    ' This is the "temporal" dictionary that stores the errors like they are 
    ' stored in JSON 
    Dim jsErrs As New Dictionary(Of String, List(Of Object)) 

    ' List that is going to be passed to the "Errors" field in the class 
    Dim lErrors As New List(Of IWebError) 



    jsErrs = jS.Deserialize(New JTokenReader(jErrors), jsErrs .GetType) 
    If Not jsErrs Is Nothing Then 
     For Each errType As KeyValuePair(Of String, List(Of Object)) In jsErrs 
      For Each Err As Object In errType.Value 
       lErrors .Add(jS.Deserialize(New JTokenReader(Err), Type.GetType(errType.Key))) 
      Next 
     Next 
    End If 
    Me.Errors = lErrors 
End Sub 
+0

ich eine Lösung gegeben, ich herauskam ... Wenden Sie sich bitte Fehler im Code gefunden zu melden. Danke für die Antworten svick und Jayesh ... – saggio09

Antwort

1

wahrscheinlich die einfachste Lösung ist Errors in eine schreibgeschützte Eigenschaft zu machen, die auf Err1 Basis berechnet und Err2:

Public Class WebErrContainer 
    Public Readonly Property Errors as List(Of IWebError) 
    Get 
     Return (Ctype(Err1, IEnumerable(Of IWebError))).Concat(Err2).ToList 
    End Get 
    End Property 

    Public Err1 as List(Of Err1) 
    Public Err2 as List(Of Err2) 
End Class 
+0

Ich habe nicht nur diese zwei Arten von Fehlern, diese Lösung half mir nicht, ich postete eine Lösung auf dem Hauptpost. – saggio09

0

Ich denke, das kann Ihnen helfen. hier strJSON ist Ihr JSON String

Dim jsS As New JavaScriptSerializer : objPostData = jsS.DeserializeObject(strJSON) 

Danach Sie dieses

For Each objTop As Object In objPostData 
       objDic = CType(objTop, Generic.Dictionary(Of String, Object)) 
       dim strError as string = objDic.Item("Errors") 
Next 

Lassen Sie mich wissen laufen kann, wenn etwas anderes wollen Sie

0

Können Sie Deserialize einfach es automatisch zu tun für du, oder ist da etwas Seltsames los? Ich habe verwendet Newtsonsoft, und ich habe es wie folgt aus (in C#)

JsonConvert.DeserializeObject(Of MyJsonFromPHP)(jsonResponseText) 

Public Class MyJsonFromPHP 
    Public Property Errors as ErrorCollection 
End Class 

Public Class ErrorCollection 
    Public Property err1 As List(Of Err1) 
    Public Property err2 As List(Of Err2) 
End Class 

Public Class Err1 
    Public Property code as Integer 
    Public Property message as String 
End Class 
Verwandte Themen