web-dev-qa-db-fra.com

VB.net JSON Deserialize

J'ai la chaîne JSON suivante à désérialiser:

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

J'utilise la méthode DataContractJsonSerializer.

Il est composé d’un tableau d’éléments et je n’ai pas pu trouver d’exemple utilisant VB.Net pour désérialiser cette structure. J'ai la classe d'application suivante pour stocker ces informations:

    <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
8
Bih Cheng

Je vous recommanderais d'utiliser JavaScriptSerializer sur DataContractJsonSerializer. Les raisons sont:

  • JavaScriptSerializer est plus rapide que DataContractJsonSerializer
  • DataContractJsonSerializer nécessite plus de code que JavaScriptSerializer pour une sérialisation simple.

Vous n'aurez pas besoin des attributs DataContract et DataMember à utiliser avec JavaScriptSerializer

Utilisez cette classe de données

<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

Et utilisez ceci pour désérialiser votre jsonText:

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

Si vous voulez toujours utiliser DataContractJsonSerializer, vous pouvez utiliser ce code ci-dessous pour désérialiser:

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

Courtoisie: Occasion Telerik Code Converter

20
Abdul Munim

Voici le moyen le plus simple de désérialiser JSON en un objet (à l'aide de .NET 4):

Exemple 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
25
CrazyTim

Cela fonctionne pour moi:

// 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"]);
0
Prescott Chartier