在过去的几个小时里,我一直在绞尽脑汁。VB.Net/JSON - 反序列化
我发现你可以序列化数据,并保存为每个单独的JSON值创建无限长的.split
命令的麻烦。所以我通过创建一个JsonHelper类来序列化和反序列化从ASP.net页面传递来的JSON,从而跟踪了很多人在Web上做了什么。
这是我的课:
Public Class NewTaskOb
Public Property Department As Integer
Public Property Type As Integer
Public Property AssignedTo As Integer
Public Property Priority As Integer
Public Property Title As String
Public Property JobCode As Integer
Public Property ParentTask As String
Public Property DueDate As Date
Public Property Scope As String
Public Property Comment As String
Public Property BudgetString As String
End Class
然后,我有这样的:
<WebMethod()> Public Shared Function NewTaskRequest(task As String) As String
Dim newTask As NewTaskOb = DeserializeJSON.JsonDeserialize(Of NewTaskOb)(task)
我的JSON根据jsonlint是有效的,但是当我通过值传递,我检查通过在Dim newTask
行上放置一个断路器,当我将鼠标悬停在它上面时,它表示每个值都是空的(Department = 0,Type = 0等),在窗体上,I我正在提交价值。
我尝试过使用DataContractJsonSerializer
,JsonHelper
和JavaScriptSerializer
。请注意,我不想输入其他参考文献(即Newtonsoft.Json
或其他类似的文献)。我想用前面提到的功能来完成这件事。
感谢您的帮助提前。
编辑(在JSON字符串本身添加):
{
"NewTask": {
"Department": "-1",
"Type": "0",
"AssignedTo": "0",
"Priority": "-1",
"Title": "",
"JobCode": "-",
"ParentTask": "-",
"DueDate": "",
"Scope": "",
"Comment": "",
"BudgetString": ""
}
}
编辑:
虽然与代码瞎搞,我又回到了JavaScriptSerializer
,发现如果我把Dim data = jss.Deserialize(Of Object)(task)
代替Dim data = jss.Deserialize(Of NewTaskOb)(task)
,那么它在显示数据时会出现一个字典,其中包含数据的字段。
Dictionary showing JSON correctly http://imageshack.com/a/img401/1174/a9ju.png
任何想法,我怎么能提取到这些类变量?
在此先感谢。
这似乎是你的类定义不适合JSON字符串。你可以发布可以演示问题的示例JSON字符串(当反序列化到'NewTaskOb'时仍然输出空属性) – har07
我目前失业,直到明天,但一旦我进入办公室,我将用JSON字符串修改我的文章。感谢您的回复。 – DeeKayy90
好的,这里有两种不同的场景。如果我把'Dim taskData As NewTaskOb = jss.Deserialize(Of NewTaskOb)(task)',它会出现一个不能将字符串转换为int的错误 - 因为所有的值都是空值。如果我把'Dim taskData = jss.Deserialize(Of Object)(task)'我得到了屏幕截图上看到的内容,并且在类型'Dictionary(Of String, Object)'not found.' – DeeKayy90