【发布时间】:2021-05-30 20:30:31
【问题描述】:
我已经成功地序列化了一整类属性(数组、字符串向量、整数、双精度)。反序列化也可以,但我需要一种方法将返回的对象解析成各种数组,然后将它们设置为等于四个相同维度的数组。
以前,当我使用 BinaryFormatter 时,我可以简单地声明 mydeser As Object,反序列化为 mydeser,然后使用例如直接提取数组。 readarray = mydeser.array.
我确实注意到 JObject 是一种字典,但我不知道键是什么或值是什么,它们是某种 jsonToken。
我尝试使用:
For each kvp as KeyValuePair(String, jsonToken) in myser
Next
但是抛出了异常。那么有没有办法使用一个键,然后将 JObject 的值直接放入数组中,使用 readarray = mydeser("array")——假设 mydeser 是一个字典?
Imports System.IO
Imports Newtonsoft.Json
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim ser As New testSer
End Sub
End Class
Public Class testSer
Public Property array As Double(,)
Public Property vector As Double()
Public Property strVec As String()
Public Property IntVec As Integer()
Sub New()
serdeser()
End Sub
Sub serdeser()
Dim r As New Random
ReDim array(1000, 1000)
ReDim vector(1000)
ReDim strVec(1000)
ReDim IntVec(1000)
For i = 1 To 1000
vector(i) = r.NextDouble
strVec(i) = "A"
IntVec(i) = r.Next(1, 100)
For j = 1 To 1000
array(i, j) = r.NextDouble
Next
Next
Dim jsonSerializer As New JsonSerializer
Dim stream As FileStream = File.Create("D:\test")
Dim writer As New StreamWriter(stream)
Dim jsonWriter As New JsonTextWriter(writer)
jsonSerializer.Serialize(jsonWriter, Me)
writer.Close()
Dim stream1 As FileStream = File.Open("D:\test", FileMode.Open, FileAccess.Read, FileShare.Read)
Dim reader As New StreamReader(stream1)
Dim jsonTextReader As New JsonTextReader(reader)
Dim mydeser As Linq.JObject
mydeser = jsonSerializer.Deserialize(jsonTextReader)
Dim readarray(1000, 1000) As Double
Dim readvector(1000) As Double
Dim readstrVec(1000) As String
Dim readIntVec(1000) As Integer
Dim mystr = DirectCast(mydeser.First, Linq.JProperty)
'readarray = mydeser.array <--need to assign "array" back into readarray
'readvector = mydeser.vector
'readstrVec = mydeser.strvec
'readarray = mydeser.intvec
reader.Close()
End Sub
End Class
【问题讨论】:
标签: json vb.net winforms dictionary json.net