VB.net JSON反序列化
我需要反序列化以下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
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响应中获取一个小的、可预测的集)。哇,这真的帮了我大忙,我正在寻找快速和简单的方法,而你做到了!!!