Asp.net VB.net反序列化,JSON从类型转换为';字典(字符串、对象)和#x27;输入';字符串';
所以我看过很多文章,但我仍然在努力将这个JSON对象序列化到类中。JSON结构如下所示Asp.net VB.net反序列化,JSON从类型转换为';字典(字符串、对象)和#x27;输入';字符串';,asp.net,json,vb.net,web-services,serialization,Asp.net,Json,Vb.net,Web Services,Serialization,所以我看过很多文章,但我仍然在努力将这个JSON对象序列化到类中。JSON结构如下所示 {“value”:{“HashTag”:“12342345636”,“companyname”:“我的测试公司”,“LeadDetail”:{“id”:“1”,“firstname”:“john”,“lastname”:“clark”,“email”:emak@mai.com“,“电话”:“9874534444”}}} 我的班级结构如下: <Serializable> _ Public Clas
{“value”:{“HashTag”:“12342345636”,“companyname”:“我的测试公司”,“LeadDetail”:{“id”:“1”,“firstname”:“john”,“lastname”:“clark”,“email”:emak@mai.com“,“电话”:“9874534444”}}}
我的班级结构如下:
<Serializable> _
Public Class LeadDetailCall
Public Property Hash() As String
Get
Return m_Hash
End Get
Set(value As String)
m_Hash = value
End Set
End Property
Private m_Hash As String = ""
Public Property CompanyName() As String
Get
Return _CompanyName
End Get
Set(value As String)
_CompanyName = value
End Set
End Property
Private _CompanyName As String = ""
Public Property Details() As List(Of LeadDetail)
Get
Return _Details
End Get
Set(ByVal value As List(Of LeadDetail))
_Details = value
End Set
End Property
Private _Details As List(Of LeadDetail)
End Class
<Serializable> _
Public Class LeadDetail
Private _id As String = ""
Private _firstname As String = ""
Private _lastname As String = ""
Private _email As String = ""
Private _phone As String = ""
Public Property id() As String
Get
Return _id
End Get
Set(value As String)
_id = value
End Set
End Property
Public Property firstname() As String
Get
Return _firstname
End Get
Set(ByVal value As String)
_firstname = value
End Set
End Property
Public Property lastname() As String
Get
Return _lastname
End Get
Set(ByVal value As String)
_lastname = value
End Set
End Property
Public Property email() As String
Get
Return _email
End Get
Set(ByVal value As String)
_email = value
End Set
End Property
Public Property phone() As String
Get
Return _phone
End Get
Set(ByVal value As String)
_phone = value
End Set
End Property
End Class
如果有人能帮助我,我将非常感激:)您的类似乎与Json不正确对应 使用,它建议您的类应如下所示:
Public Class LeadDetail
Public Property id As String
Public Property firstname As String
Public Property lastname As String
Public Property email As String
Public Property phone As String
End Class
Public Class Value
Public Property HashTag As String
Public Property companyname As String
Public Property LeadDetail As LeadDetail
End Class
Public Class LeadDetailCall
Public Property value As Value
End Class
提供的JSON只有一个元素,因此它将生成一个元素的集合(字典)。我添加了一个“项目”,以确保下面的代码正常工作,并用于说明。适当的缩进使事情更容易理解:
{
"foo": {
"HashTag": "12342345636",
"companyname": "my test company",
"LeadDetail": {
"id": "1",
"firstname": "ziggy",
"lastname": "clark",
"email": "emak@mai.com",
"phone": "9874534444"
}
},
"bar": {
"HashTag": "02342345636",
"companyname": "my test company2",
"LeadDetail": {
"id": "1",
"firstname": "john",
"lastname": "clark",
"email": "emak@mai.com",
"phone": "1874534444"
}
}
}
从缩进最深的开始,很容易看到一个LeadDetail
类,带有{ID,FirstName等)。对于多个项(如我的),这将重复
还有“foo”和“bar”对象,其中包含少量数据和一个LeadDetail
对象。当您使用任何一个机器人时,它们都会为每个机器人创建一个类。我的机器人将命名为“foo”和“bar”,但在其他方面是相同的。在下面的代码中,我将其压缩为一个名为“Item”的类。然后您可以处理它们(foo和bar)作为字典(字符串、项)
,它们的名称是键
但是还有一个不太明显的类/类型:最外层的{..}
。robot工具将创建一个名为“Example”或“RootObject”的类。您不需要它,也不希望它作为字典:
' modified from VS's EDIT -> Paste Special -> JSON as Classes
Public Class Item
Public Property HashTag As String
Public Property companyname As String
Public Property LeadDetail As Leaddetail
End Class
Public Class Leaddetail
Public Property id As String
Public Property firstname As String
Public Property lastname As String
Public Property email As String
Public Property phone As String
End Class
然后代码:
Dim jstr As String = ...
' use the Item/Value class not the container
Dim myJ = JsonConvert.DeserializeObject(Of Dictionary(Of String, Item))(jstr)
' print some of the data
For Each kvp As KeyValuePair(Of String, Item) In myJ
Console.WriteLine("key {0}, CompName {1}, Contact: {2}", kvp.Key,
kvp.Value.companyname,
kvp.Value.LeadDetail.firstname)
Next
输出:
关键字:foo,公司名称:我的测试公司,联系人:ziggy钥匙:酒吧,公司名称:我的测试公司2,联系人:约翰
如果您在原始JSON上运行它,您会得到一个字典。@Keith Beard在这个问题中说过,需要序列化,然后反序列化到类中。我从ajax jquery调用webmethod
<System.Web.Services.WebMethod()>
Public Shared Function InsertObject (data As Object) As Boolean
Try
Dim jstr = JsonConvert.SerializeObject(data)
Dim _invoice = JsonConvert.DeserializeObject(Of DtoInvoice)(jstr)
'Make another stuff here
Return True
Catch ex As Exception
Return False
End Try
End Function
作为布尔值的公共共享函数InsertObject(数据作为对象)
尝试
Dim jstr=JsonConvert.SerializeObject(数据)
Dim _invoice=JsonConvert.DeserializeObject(属于DtoInvoice)(jstr)
“在这里再做一件东西
返回真值
特例
返回错误
结束尝试
端函数
仍然得到无效的强制转换异常,@kcbeard当时不知道。我建议不要从上面的嵌套Json开始,而是从一些非常基本的东西开始,比如{“value”:“test”}
然后看看你是否可以让它工作,如果可以的话,让json一次复杂一点。我必须将它序列化为一个字符串,然后将字符串反序列化到我的对象以使其工作。你的类暗示你期望或希望在json中允许一个集合,但这不是它的构造方式。如果是这样,你能发布一个sa吗有多个条目(或链接)的示例令人惊叹:)因为我现在确实理解了异常错误有时当你在森林中迷路时,很难看到树;)@puropoix:在中面临同样的问题,但无法解决。请你看一下。
Dim jstr As String = ...
' use the Item/Value class not the container
Dim myJ = JsonConvert.DeserializeObject(Of Dictionary(Of String, Item))(jstr)
' print some of the data
For Each kvp As KeyValuePair(Of String, Item) In myJ
Console.WriteLine("key {0}, CompName {1}, Contact: {2}", kvp.Key,
kvp.Value.companyname,
kvp.Value.LeadDetail.firstname)
Next
<System.Web.Services.WebMethod()>
Public Shared Function InsertObject (data As Object) As Boolean
Try
Dim jstr = JsonConvert.SerializeObject(data)
Dim _invoice = JsonConvert.DeserializeObject(Of DtoInvoice)(jstr)
'Make another stuff here
Return True
Catch ex As Exception
Return False
End Try
End Function