web-dev-qa-db-ja.com

VB.net JSONデシリアライズ

逆シリアル化する次のJSON文字列があります。

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

DataContractJsonSerializerメソッドを使用しています。

それはアイテムの配列で構成されており、この構造を逆シリアル化できるVB.Netを使用した例を見つけることができませんでした。この情報を保存する次のApplicationクラスがあります。

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

JavaScriptSerializerではなくDataContractJsonSerializerを使用することをお勧めします。理由は次のとおりです。

  • JavaScriptSerializerDataContractJsonSerializerより高速です
  • DataContractJsonSerializerは、単純なシリアル化のためにJavaScriptSerializerより多くのコードを必要とします。

DataContractとともに使用する場合、DataMemberおよび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

21
Abdul Munim

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

これは私にとってはうまくいきます:

// 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