VB.net JSON反序列化

Bih*_*eng 8 vb.net json deserialization

我有以下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
Run Code Online (Sandbox Code Playgroud)

Cra*_*Tim 25

以下是将JSON反序列化为对象的最简单方法(使用.NET 4):

示例JSON:

{
    "dogs":[],
    "chickens":[
        {
            "name":"Macey",
            "eggs":7
        }, 
        {
            "name":"Alfred",
            "eggs":2
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

  • 哇,这真的帮助了我,我正在寻找快速而简单的东西,你做到了! (2认同)

Abd*_*nim 21

我建议你用完JavaScriptSerializer了DataContractJsonSerializer.原因是:

  • JavaScriptSerializer 更快 DataContractJsonSerializer
  • DataContractJsonSerializer需要比JavaScriptSerializer简单序列化更多的代码.

您不需要DataContract和the 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
Run Code Online (Sandbox Code Playgroud)

并使用它来反序列化你的jsonText:

Dim jss As New JavaScriptSerializer()
Dim dict = jss.Deserialize(Of List(Of ApplicationItem))(jsonText)
Run Code Online (Sandbox Code Playgroud)

如果您仍想使用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()
Run Code Online (Sandbox Code Playgroud)

礼貌:使用Telerik Code Converter