2011-11-14 96 views
9

我有以下的JSON字符串反序列化:VB.net JSON反序列化

[{"application_id":"1","application_package":"abc"},{"application_id":"2","application_package":"xyz"}]

我使用DataContractJsonSerializer方法。

它是由项目数组组成的,我找不到使用VB.Net可以反序列化此结构的示例。我有以下应用类来存储这样的信息:

​​

回答

20

我建议你到超过DataContractJsonSerializer使用JavaScriptSerializer。其理由是:

  • JavaScriptSerializer快超过DataContractJsonSerializer
  • DataContractJsonSerializer需要比JavaScriptSerializer一个简单的序列化的更多代码。

你不会需要DataContractDataMember属性与JavaScriptSerializer

使用此数据类

<Serializable> _ 
Public Class ApplicationItem 
    Public Property application_id() As String 
     Get 
      Return m_application_id 
     End Get 
     Set 
      m_application_id = Value 
     End Set 
    End Property 
    Private m_application_id As String 
    Public Property application_package() As String 
     Get 
      Return m_application_package 
     End Get 
     Set 
      m_application_package = Value 
     End Set 
    End Property 
    Private m_application_package As String 
End Class 

一起使用,并以此来反序列化jsonText

Dim jss As New JavaScriptSerializer() 
Dim dict = jss.Deserialize(Of List(Of ApplicationItem))(jsonText) 

如果你仍然想使用DataContractJsonSerializer,你可以使用下面这个代码反序列化:

Dim obj As New List(Of ApplicationItem)() 
Dim ms As New MemoryStream(Encoding.Unicode.GetBytes(json)) 
Dim serializer As New System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.[GetType]()) 
obj = DirectCast(serializer.ReadObject(ms), List(Of ApplicationItem)) 
ms.Close() 
ms.Dispose() 

提供者:用于Telerik Code Converter

+0

它完美的作品。感谢您也显示了一个代码转换器的链接。 –

+0

我不熟悉VB.NET语法并经常使用它将C#代码转换为VB.NET :) –

+0

很酷,感谢提示!使用JavaScriptSerializer真的很容易 –

22

这里是反序列化JSON成一个对象的最简单的方式(使用.NET 4):

例JSON:

{ 
    "dogs":[], 
    "chickens":[ 
     { 
      "name":"Macey", 
      "eggs":7 
     }, 
     { 
      "name":"Alfred", 
      "eggs":2 
     } 
    ] 
} 

VB.NET:

Try 
    Dim j As Object = New JavaScriptSerializer().Deserialize(Of Object)(JSONString) 
    Dim a = j("dogs")     ' returns empty Object() array 
    Dim b = j("chickens")(0)   ' returns Dictionary(Of String, Object) 
    Dim c = j("chickens")(0)("name") ' returns String "Macey" 
    Dim d = j("chickens")(1)("eggs") ' returns Integer 2 
Catch ex As Exception 
    ' in case the structure of the object is not what we expected. 
End Try 
+1

虽然Abdul的答案更加完整,但这确实是以一种快速和肮脏的方式访问JSON数据的最简单方法(例如来自API响应的小型可预测集合)。 – msanford

+2

哇,这真的帮了我,我正在寻找快速简单的东西,你做到了! –

0

这适用于我:

// Get the HttpWebRequest reaponse 
string Response = loResponseStream.ReadToEnd(); 

var jss = new JavaScriptSerializer(); 
var dict = jss.Deserialize<Dictionary<string, dynamic>>(Response); 
string carrier = (dict["Response"]["carrier"]);