2012-10-08 116 views
3

我有這個字符串:VB.NET解析查詢字符串數組

1=True&2=150+minutes&3=True&4=True&5=Continuing+to+smoke 

我怎樣才能得到它到一個數組或對象是這樣的:

[1] => True 
[2] => "150 minutes" 
etc? 

我已經試過這樣:

<HttpPost()> 
Function GetQuizScore(ByVal data As String) As JsonResult 

    'Debug.Print(data) 

    Dim jss = New JavaScriptSerializer 

    Dim dict = jss.Deserialize(Of List(Of String))(data) 

    Debug.Print(String.Join(", ", dict)) 

    Return Json(data) 

End Function 

但是,它給了我一個錯誤,指出:

無效JSON原始: 真& 2 = 150 +分鐘& 3 =真& 4 =真& 5 =繼續+至+煙霧。

感謝您的幫助。

回答

3

您擁有的字符串是QueryString,不是JSON字符串。因此,你可以使用

將其轉換爲一個NameValueCollection中。


實施例:

Dim s = "1=True&2=150+minutes&3=True&4=True&5=Continuing+to+smoke" 

Dim parsed = HttpUtility.ParseQueryString(s) 

For Each key In parsed 
    Console.WriteLine(key & ": " & parsed(key)) 
Next 

輸出:

1: True 
2: 150 minutes 
3: True 
4: True 
5: Continuing to smoke 
+0

謝謝,這很奇怪,因爲我通過jQuery AJAX發送它,並將「type」設置爲「json」。 – user1477388

+1

儘管這回答了OP的問題,但它並不是推薦的方法。使用MVC,最好引入視圖模型,讓服務器爲您綁定模型。 @ user1477388設置參數的contentType並不意味着它將被解析爲JSON,而是簡單地通知服務器需要的數據類型,它仍然由服務器來處理綁定。使用MVC,它會自動將鍵/值和JSON數據綁定到匹配相同屬性的模型。 – James

+0

很酷。我不知道它是自動完成的。 – user1477388

3

那麼首先,將發生的錯誤,因爲你試圖解析鍵/值對字符串作爲JSON對象(它顯然是不是)。其次,你使用MVC,應該不需要任何手動序列化服務器端,讓ASP.NET MVC模型綁定器爲你做。爲您的動作引入一個視圖模型,例如

Public Class QuizScoreViewModel 

    Property Property1 As String 
    Property Property2 As String 
    ... 

End Class 

然後更新您的操作參數的期望QuizScoreViewModel例如

<HttpPost()> 
Function GetQuizScore(ByVal viewModel As QuizScoreViewModel) As JsonResult 

    Debug.Print(viewModel.Property1) 
    ... 

End Function 
+0

謝謝,詹姆斯。這是一個有趣的想法。 – user1477388

+1

@ user1477388使用MVC時,這是正確的做事方式。 – James

+0

我會牢記這一點。謝謝。 – user1477388