2011-11-14 21 views
9

मैं deserialize के लिए निम्न JSON स्ट्रिंग मिल गया है:VB.net JSON deserialize

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

मैं DataContractJsonSerializer विधि का उपयोग कर रहा हूँ।

यह आइटमों की सरणी से बना है और मुझे VB.Net का उपयोग करके कोई उदाहरण नहीं मिला जो इस संरचना को deserialize कर सकते हैं।

<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 

उत्तर

20

मैं तुम्हें DataContractJsonSerializer से अधिक JavaScriptSerializer उपयोग करने के लिए सलाह देते हैं: मैं इस जानकारी को संग्रहीत करने के लिए निम्न आवेदन वर्ग की है। कारण हैं:

  • JavaScriptSerializer तेजी DataContractJsonSerializer से अधिक
  • DataContractJsonSerializer एक सरल क्रमांकन के लिए JavaScriptSerializer की तुलना में अधिक कोड की आवश्यकता है।

आप के साथ इस डेटा वर्ग 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 

साथ उपयोग करें और deserialize करने के लिए इस का उपयोग करने के DataContract और DataMember विशेषता की जरूरत नहीं होगी अपने jsonText:

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

यदि आप अभी भी DataContractJsonSerializer का उपयोग करना चाहते हैं, तो आप कर सकते हैं 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() 

सौजन्य: प्रयुक्त Telerik Code Converter

+0

यह पूरी तरह से काम करता है। एक कोड कनवर्टर के लिए एक लिंक दिखाने के लिए भी धन्यवाद। –

+0

मैं वीबी.नेट सिंटैक्स से परिचित नहीं हूं और इसे अक्सर सी # कोड को VB.NET में परिवर्तित करने के लिए उपयोग करता हूं :) –

+0

कूल, संकेत के लिए धन्यवाद! जावास्क्रिप्टसेरियलाइज़र –

22

यहाँ एक वस्तु में JSON deserialize करने के लिए सबसे आसान तरीका है (.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

का उपयोग करना वास्तव में आसान है, जबकि अब्दुल का उत्तर अधिक पूरा हो गया है, यह वास्तव में जेएसओएन डेटा को त्वरित और गंदे तरीके से एक्सेस करने का सबसे आसान तरीका है (जैसे एपीआई प्रतिक्रिया से छोटा, अनुमानित सेट)। – 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"]);