2011-11-14 31 views
9

Tôi đã có chuỗi JSON sau để deserialize:VB.net JSON Deserialize

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

Tôi đang sử dụng phương pháp DataContractJsonSerializer.

Nó được tạo thành từ mảng các mục và tôi không thể tìm thấy một ví dụ sử dụng VB.Net có thể deserialize cấu trúc này. Tôi có lớp Application sau để lưu trữ thông tin này:

<DataContract(Namespace:="")> _ 
    Public Class ApplicationItem 

    <DataMember(Name:="application_id")> 
    Public Property application_id As String 

    <DataMember(Name:="application_package")> 
    Public Property application_package As String 

    End Class 

Trả lời

20

tôi muốn khuyên bạn nên sử dụng JavaScriptSerializer qua DataContractJsonSerializer. Lý do là:

  • JavaScriptSerializer là nhanh hơn so với DataContractJsonSerializer
  • DataContractJsonSerializer đòi hỏi mã hơn JavaScriptSerializer cho một serialization đơn giản.

Bạn sẽ không cần thuộc tính DataContractDataMember để sử dụng cùng với JavaScriptSerializer

Sử dụng lớp dữ liệu này

<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 

Và sử dụng này để deserialize bạn jsonText:

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

Nếu bạn vẫn muốn sử dụng DataContractJsonSerializer, bạn có thể sử dụng mã này dưới đây để deserialize:

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

Courtesy: Được sử dụng Telerik Code Converter

+0

Nó hoạt động hoàn hảo. Cảm ơn bạn đã hiển thị liên kết đến trình chuyển đổi mã. –

+0

Tôi không quen thuộc với cú pháp VB.NET và sử dụng nó thường xuyên để chuyển đổi mã C# thành VB.NET :) –

+0

Tuyệt vời, cảm ơn gợi ý! Nó thực sự dễ sử dụng hơn JavaScriptSerializer –

22

Đây là cách dễ nhất để deserialize JSON thành một đối tượng (sử dụng .NET 4):

Ví dụ 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

Trong khi câu trả lời của Abdul hoàn chỉnh hơn, đây thực sự là cách dễ nhất để truy cập dữ liệu JSON một cách nhanh chóng và dơ bẩn (chẳng hạn như một bộ nhỏ, có thể dự đoán được từ một phản hồi API). – msanford

+2

Wow điều này thực sự đã giúp tôi ra, tôi đã tìm kiếm một cái gì đó nhanh chóng và đơn giản và bạn đã làm nó !!! –

0

Điều này phù hợp với tôi:

// 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"]); 
Các vấn đề liên quan