2012-10-08 209 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