【发布时间】:2016-03-17 13:58:38
【问题描述】:
我正在尝试反序列化通常需要两个类的 JSON 字符串,我想用从 MS Access 字段名称获得的数组中的项目替换其中一个类(请参阅注释掉的类)。
这样,如果数据库表发生变化(只有 Access 表本身和源 JSON),我就不必修改我的代码。
在下面的代码中,我被困在如何定义公共属性“数据”以及 js.data (SampleClass.data) 的定义上。看到我的??????问号!我正在尝试使用 List (Of String) 来存储字段名称,并希望将这些列表存储在 Data(0)、Data(1)、Data(2) 等中,因此每个 Data 元素都有字段名称列表,以及每条记录的关联值。
我想按如下方式获取我的数据: Node.js (SampleClass) 包含未知数量的“数据”列表(根据在 JSON 字符串中找到的数量),每个列表都包含从 Access 获得的字段名。 然后我想将结果插入到 MS Access 表中,每个“数据”列表都是一条记录。
注意:我已将“rawresp”(来自 HTTP 请求)替换为非常小的 JSON 字符串提取。
谁能帮忙,不胜感激。我希望这一切都有意义
谢谢, 阿德里安
Imports Newtonsoft.Json
'link to create classes
'http://www.httputility.net/json-to-csharp-vb-typescript-class.aspx
'example of json script
'http://stackoverflow.com/questions/21676708/simple-working-example-of-json- net-in-vb-net
'Public Class Datum
'Public ABC As String
'Public DEF As String
'Public GHI As Integer
'Public JKL As Integer
'Public MNO As String
'Public PQR As String
'Public STU As String
'Public VWX As String
'Public YZA As String
'Public BCD As Integer
'Public EFG As Integer
'Public HIJ As String
'Public KLM As String
'Public NOP As String
'Public QRS As String
'End Class
Public Class SampleClass
Public Property Success As Boolean
?????? Public Property Data As List(Of String)
End Class
Module JSON
Sub getjson()
'Try
cleanup(Nothing, Nothing)
Dim daoEngine As New dao.DBEngine, db As dao.Database
db = daoEngine.OpenDatabase(DBPath)
Dim rst As dao.Recordset = Nothing
rst = db.OpenRecordset("tUnit") 'open table
Dim fields(rst.Fields.Count) As String
For j = 0 To rst.Fields.Count
fields(j) = rst.Fields(j).Name
Next
Dim js As New SampleClass
?????? Dim js.data As List(Of js.Data)(fields)
Dim rawresp As String
Dim request As Net.HttpWebRequest
Dim response As Net.HttpWebResponse = Nothing
Dim reader As IO.StreamReader
request = DirectCast(Net.WebRequest.Create("http://10.32.27.17/api/endusers"), Net.HttpWebRequest)
response = DirectCast(request.GetResponse(), Net.HttpWebResponse)
reader = New IO.StreamReader(response.GetResponseStream())
rawresp = reader.ReadToEnd()
js = JsonConvert.DeserializeObject(Of SampleClass)("{""success"":true,""data"":[{""ABC"":""Something"",""DEF"":""Other""},{""ABC"":""This"",""DEF"":""That""}]}")
?????? For Each i As String In js.Data
rst.MoveFirst()
Do While Not rst.EOF 'look through to end of table
If n(rst(i(1)).Value) Like i(1) Then
For Each j In i
rst.Edit()
rst(j).Value = j
rst.Update()
Next
End If
rst.MoveNext() 'move to next record
Loop
Next
cleanup(db, Nothing)
'Catch ex As Exception
' Debug.Print(ex.Message)
'End Try
End Sub
End Module
【问题讨论】:
-
那是无效的 json
-
如果你指的是额外的引号,它们在VB网络字符串中是必需的
-
我很清楚。但是,如果您将结果提供给它不会验证的任何机器人。通过以导致错误 json 的方式创建它很容易拥有太多或太少。 JSON.NET 将允许您非常轻松地重命名反序列化对象中的属性
-
粘贴这个 {"success":true,"data":[{"ABC":"Something","DEF":"Other"},{"ABC":"This"," DEF":"那个"}]}
标签: json vb.net class serialization