VB.NET将查询字符串解析为数组

时间:2012-10-08 12:32:37

标签: asp.net-mvc vb.net json

我有这个字符串:

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 =继续+至+烟

感谢您的帮助。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:3)

首先,您的错误发生是因为您尝试将键/值对字符串解析为JSON对象(显然不是这样)。其次,你使用MVC,应该不需要任何手动序列化服务器端,让ASP.NET MVC模型绑定器为你做。为您的行动引入一个视图模型,例如

Public Class QuizScoreViewModel

    Property Property1 As String
    Property Property2 As String
    ...

End Class

然后将您的action参数更新为expect QuizScoreViewModel,例如

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

    Debug.Print(viewModel.Property1)
    ...

End Function