在過去的幾個小時裏,我一直在絞盡腦汁。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