3

我有这个字符串:

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 原语:True&2=150+minutes&3=True&4=True&5=Continuing+to+smoke。

谢谢你的帮助。

4

2 回答 2

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
于 2012-10-08T12:36:44.573 回答
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
于 2012-10-08T12:50:22.893 回答