Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Visual Basic 2010中使用对象进行JSON编码和解码_Json_Vb.net_Visual Studio 2010_Linq_Json.net - Fatal编程技术网

在Visual Basic 2010中使用对象进行JSON编码和解码

在Visual Basic 2010中使用对象进行JSON编码和解码,json,vb.net,visual-studio-2010,linq,json.net,Json,Vb.net,Visual Studio 2010,Linq,Json.net,我有以下代码: Imports Newtonsoft.Json Imports Newtonsoft.Json.Linq Module Module1 Structure JSONList Dim Name, Email As String Dim Age As Integer End Structure Sub Main() Dim Data(1) As JSONList Data(0).Name = "Josh" Data(0).Age = 17

我有以下代码:

Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
Module Module1

Structure JSONList
    Dim Name, Email As String
    Dim Age As Integer
End Structure

Sub Main()
    Dim Data(1) As JSONList

    Data(0).Name = "Josh"
    Data(0).Age = 17
    Data(0).Email = "me@mail.co.uk"
    Data(1).Name = "Greg"
    Data(1).Age = 17
    Data(1).Email = "greg@hotmail.co.uk"

    Dim JSONEncode As String
    JSONEncode = JsonConvert.SerializeObject(Data)
    Console.WriteLine(JSONEncode)
    Console.WriteLine()
    Console.WriteLine()

    Dim JSONDecode() As JSONList = JsonConvert.DeserializeObject(JSONEncode)
    Console.WriteLine(JSONDecode(0).Name)

    Console.ReadKey()


End Sub

End Module
脚本的第一个编码部分用于将编码字符串存储到数据库,输出为:

[{"Name":"Josh","Email":"me@mail.co.uk","Age":17},{"Name":"Greg","Email":"greg@hotmail.co.uk","Age":17}]
现在,当我尝试解码这个JSON字符串时,出现一个错误
无法将类型为“Newtonsoft.JSON.Linq.JArray”的对象强制转换为类型为“JSONList[]”。


我需要将数据编码为JSON格式,这样我就可以在使用PHP解码的网站中使用它。我将Visual Basic 2010与JSON.NET一起使用。

问题在于
JsonConvert.DeserializeObject
反序列化为
Newtonsoft.JSON.Linq.JArray
类型的对象,而.NET无法自动转换为
JSONList
的数组。需要进行一点转换:

Dim jsonObject As Newtonsoft.Json.Linq.JArray =
                                        JsonConvert.DeserializeObject(JSONEncode)

Dim JSONDecode() As JSONList = (
                                 From j In jsonObject
                                 Select New JSONList() With {.Age = j("Age"),
                                                             .Email = j("Email"),
                                                             .Name = j("Name")}
                               ).ToArray()

问题是,
JsonConvert.DeserializeObject
反序列化为类型为
Newtonsoft.Json.Linq.JArray
的对象,而.net无法自动转换为
JSONList
的数组。需要进行一点转换:

Dim jsonObject As Newtonsoft.Json.Linq.JArray =
                                        JsonConvert.DeserializeObject(JSONEncode)

Dim JSONDecode() As JSONList = (
                                 From j In jsonObject
                                 Select New JSONList() With {.Age = j("Age"),
                                                             .Email = j("Email"),
                                                             .Name = j("Name")}
                               ).ToArray()

正如@Adrian所说,
JsonConvert.DeserializeObject
将反序列化为
JArray
,而.Net无法自动将其转换为
JSONList
结构的数组。但是,您不需要进行手动转换;只需使用接受类型参数的
反序列化对象
重载即可。这将允许Json.Net直接反序列化到您的类型,而不需要任何特殊的转换代码

Dim JSONDecode() As JSONList = _
                 JsonConvert.DeserializeObject(Of JSONList())(JSONEncode)

正如@Adrian所说,
JsonConvert.DeserializeObject
将反序列化为
JArray
,而.Net无法自动将其转换为
JSONList
结构的数组。但是,您不需要进行手动转换;只需使用接受类型参数的
反序列化对象
重载即可。这将允许Json.Net直接反序列化到您的类型,而不需要任何特殊的转换代码

Dim JSONDecode() As JSONList = _
                 JsonConvert.DeserializeObject(Of JSONList())(JSONEncode)