0

クライアント側で JSON オブジェクトを作成し、それをasp:HiddenField

ここにその一部がありますObject

"[{"value":"0","column":"lngTask"},{"value":"End Checklist","column":"strTask"},
  {"value":"0","column":"lngChecklistRevision"},
  {"value":"","column":"lngManagedTask"}......]"

次に、私が使用しているコードビハインドでそれを使用したかったVisual Basic

だから私はこのように使用JavaScriptSerializer()しました:

Dim jss As New JavaScriptSerializer()
Dim lstReport As List(Of Object) = jss.Deserialize(Of List(Of Object))
    (hfObjSqlGridRow.Value)

これが私のlstReport見た目です:

ここに画像の説明を入力

私の質問は、このオブジェクトをループする方法です

私は次のようなことを試しました:

lsReport(0)(0)
lsReport(0).(0).value
lsReport(0).value

このエラーが発生します = The given key was not present in the Dictionary.

4

3 に答える 3

0

これを試して:

dim JSObject as String =
[
  {"00ID": "PTDA_000ParentCat_000Cat_000SubCat_000_ParentCatTxt", "00Val": "Page"}, 
  {"00ID": "PTDA_000ParentCat_000Cat_000SubCat_001_CatTxt", "00Val": "Inherite Parent"}, 
  {"00ID": "PTDA_000ParentCat_000Cat_000SubCat_002_SubCatTxt", "00Val": "Inherite Parent"}, 
  {"00ID": "PTDA_000ParentCat_000Cat_000SubCat_010_UCI", "00UCItype" : "UCItf", "00Val": "false", "01Txt": "Include related containers", "02Tip": "include related containers"}
]

            Dim serializer As JavaScriptSerializer = New JavaScriptSerializer()
            Dim obj As Object = serializer.Deserialize(Of Object)(JSObject)

    s = GetProp(obj, "PTDA_000ParentCat_000Cat_000SubCat_000_ParentCatTxt.00Val")
            SetProp(obj, "PTDA_000ParentCat_000Cat_000SubCat_000_ParentCatTxt.00Val", "NEwVal")
            s = GetProp(obj, "PTDA_000ParentCat_000Cat_000SubCat_000_ParentCatTxt.00Val")
            s = ""

Public Function GetProp(objf As Object, propPath As String) As String
    Dim propVal As String = ""
    Dim propPathAr As Array = Split(propPath, ".")
    'http://stackoverflow.com/questions/8118019/vb-net-json-deserialize
    For Each item In objf
        If item("00ID") = propPathAr(0) Then
            propVal = item(propPathAr(1))
            Exit For
        End If
    Next
    Return propVal
End Function
Public Sub SetProp(ByRef objf As Object, propPath As String, val As String)
    Dim propPathAr As Array = Split(propPath, ".")
    For Each item In objf
        If item("00ID") = propPathAr(0) Then
            item(propPathAr(1)) = val
            Exit Sub
        End If
    Next
End Sub
于 2016-05-07T10:48:36.087 に答える
0

このコードは C# ですが、VB.NET に簡単に変換できるはずです。基本的な前提は、JavaScript の JSON オブジェクトのように、実行時にプロパティにアクセスできる動的な JSON シリアライザーを使用することです。動的オブジェクトのサポートには .NET 4.0 を使用している必要があります。

JSONをC#動的オブジェクトに逆シリアル化しますか?

于 2013-04-04T18:05:20.857 に答える
0

For Eachループだけ使えないの?

For Each item In lsReport
    ' Do whatever you need with item.value
Next
于 2013-04-04T18:05:34.413 に答える