2012-04-05 8 views
0

私はこのようなJSONオブジェクトを持っています。カスタムJSONオブジェクトをVB.NETオブジェクトに変換する

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

このオブジェクトを使用して、リクエストで見つかったエラーをPHPページに報告します。私はvb.Netオブジェクトに、そのオブジェクトを変換したい

はこのように、基本的に宣言:私の実装は十分に良好であれば、私は知らない

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 

、私はvb.netに比較的新しいですOOPでの私のスキルは少し低いです。

それは...私は状況を説明したと思います。

さらに詳しい情報が必要な場合は、私はそれを提供します。

お手数をおかけしていただきありがとうございます。ありがとう。

PD:私は現在NewtonsoftのJSON.Netライブラリを使用しています。 VB.NETでJSONを扱うには、他のライブラリやメソッドをお勧めします。


私はこれを行うことによって、状況を解決:

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

のようにそれをやりました。 答えはsvickとJayeshです。 – saggio09

答えて

1

おそらく最も簡単な解決策はErr1Err2に基づいて計算された読み取り専用のプロパティにErrorsを作ることです。

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

私はこの2つのタイプのエラーだけではなく、この解決策は私を助けませんでした。私はメインポストに解決策を投稿しました。 – saggio09

0

これはあなたを助けるかもしれないと思います。 ここstrJSONは、あなたが何か他のものは、あなたが

0

があなただけのために自動的にそれを行うにはデシリアライズを使用することができますしたい場合は、私に教えてください

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

を繰り返すことができます。その後

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

あなたのJSON文字列でありますあなた、または何か変なことが起こっています。私はコードで見つかったエラーを報告すること自由に感じてください...で出てきた溶液を加え、私はNewtsonsoftを使用しました、と私は、この(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 
関連する問題