2011-11-14 87 views
9

Tengo la siguiente cadena JSON deserializar:VB.net JSON Deserialize

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

estoy usando el método DataContractJsonSerializer.

Se compone de una matriz de elementos y no pude encontrar un ejemplo con VB.Net que pueda deserializar esta estructura. Tengo la siguiente clase de aplicación para almacenar esta información:

<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 

Respuesta

20

lo recomiendo que uses JavaScriptSerializer sobre DataContractJsonSerializer. Las razones son:

  • JavaScriptSerializer es más rápido sobre DataContractJsonSerializer
  • DataContractJsonSerializer requiere más código que JavaScriptSerializer para un simple serialización.

usted no necesitará el atributo DataContract y DataMember utilizar junto con JavaScriptSerializer

Utilice esta clase de datos

<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 

y usar esto para deserializar su jsonText:

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

Si aún quiere usar DataContractJsonSerializer, puede utilizar este código de abajo para deserializar:

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

Cortesía: Se utiliza Telerik Code Converter

+0

funciona perfectamente. Gracias por mostrar un enlace a un convertidor de código también. –

+0

No estoy familiarizado con la sintaxis de VB.NET y la uso a menudo para convertir el código de C# a VB.NET :) –

+0

¡Genial, gracias por la pista! Es realmente más fácil usar JavaScriptSerializer –

22

Aquí es la forma más fácil de deserializar JSON en un objeto (utilizando .NET 4):

Ejemplo 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

Si bien la respuesta de Abdul es más completa, esta es de hecho la manera más fácil de acceder a los datos JSON de una manera rápida y sucia (como un conjunto pequeño y predecible de una respuesta API). – msanford

+2

¡Guau, esto realmente me ayudó, estaba buscando algo rápido y simple y lo hiciste! –

0

Esto funciona para mí:

// 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"]); 
Cuestiones relacionadas