Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VB.net JSON反序列化_Json_Vb.net_Deserialization - Fatal编程技术网

VB.net JSON反序列化

VB.net JSON反序列化,json,vb.net,deserialization,Json,Vb.net,Deserialization,我需要反序列化以下JSON字符串: 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.Re

我需要反序列化以下JSON字符串:

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()
[{“应用程序id”:“1”,“应用程序包”:“abc”},{“应用程序id”:“2”,“应用程序包”:“xyz”}]

我正在使用DataContractJsonSerializer方法

它是由项目数组组成的,我找不到一个使用VB.Net反序列化这个结构的例子。我有以下应用程序类来存储此信息:

    <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
_
公共阶级主义
公共属性应用程序\u id为字符串
公共属性应用程序包作为字符串
末级

我建议您使用
JavaScriptSerializer
而不是
DataContractJsonSerializer
。原因是:

  • JavaScriptSerializer
    DataContractJsonSerializer
  • 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
如果仍要使用
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()

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

JSON示例:

{
“狗”:[],
“鸡”:[
{
“姓名”:“梅西”,
“鸡蛋”:7个
}, 
{
“姓名”:“阿尔弗雷德”,
“鸡蛋”:2
}
]
}
VB.NET:

试试看
Dim j As Object=New JavaScriptSerializer()。反序列化(对象的)(JSONString)
Dim a=j(“狗”)返回空的Object()数组
Dim b=j(“0”)返回字典(字符串、对象的)
Dim c=j(“鸡”)(0)(“名称”)返回字符串“Macey”
Dim d=j(“鸡”)(1)(“蛋”)返回整数2
特例
“以防对象的结构不是我们所期望的。
结束尝试
这对我很有用:

// 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"]);
//获取HttpWebRequest响应
字符串响应=loResponseStream.ReadToEnd();
var jss=新的JavaScriptSerializer();
var dict=jss.反序列化(响应);
字符串载体=(dict[“Response”][“carrier”]);

它工作得非常好。也感谢您显示代码转换器的链接。我不熟悉VB.NET语法,经常使用它将C#代码转换为VB.NET:)很酷,谢谢您的提示!使用JavaScriptSerializer确实更容易。如果JavaScriptSerializer比DataContractJsonSerializer快,为什么json.net宣传自己“比DataContractJsonSerializer快50%,比JavaScriptSerializer快250%”在他们的?@mijiturka上,尽管JSON.NET在当时有着可接受的基础,但可能没有今天那么多。如果我今天回答了这个问题,我会使用JSON.NET:)虽然Abdul的答案更完整,但这确实是以快速和肮脏的方式访问JSON数据的最简单的方法(例如从API响应中获取一个小的、可预测的集)。哇,这真的帮了我大忙,我正在寻找快速和简单的方法,而你做到了!!!