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

时间:2013-09-23 17:50:27

标签: 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
    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字符串时,出现错误Unable to cast object of type 'Newtonsoft.Json.Linq.JArray' to type 'JSONList[]'.

我需要以JSON格式编码数据,以便我可以在我的网站中使用它来使用PHP对其进行解码。我正在使用Visual Basic 2010和JSON.NET。

2 个答案:

答案 0 :(得分:1)

问题是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()

答案 1 :(得分:0)

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

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