2013-09-23 42 views
1

我有以下代码:JSON编码和使用对象解码在Visual Basic 2010

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 = "[email protected]" 
    Data(1).Name = "Greg" 
    Data(1).Age = 17 
    Data(1).Email = "[email protected]" 

    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":"[email protected]","Age":17},{"Name":"Greg","Email":"[email protected]","Age":17}] 

现在,当我尝试这个JSON字符串解码,我得到一个错误Unable to cast object of type 'Newtonsoft.Json.Linq.JArray' to type 'JSONList[]'.

我需要的数据,以JSON格式进行编码,这样我可以在我的网站采用p使用惠普解码它。我正在使用Visual Basic 2010和JSON.NET。

回答

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() 
0

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

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