.NET服务中的JSON反序列化 - 无法解决此问题

时间:2015-02-24 21:09:18

标签: javascript asp.net json vb.net deserialization

我在这个问题上花了几天时间无济于事。我只需要在VB.NET中反序列化一个JSON对象,但我经常遇到这个错误:

"输入' System.String'不支持对数组进行反序列化。"

我已经使用了我发现的每一个建议来尝试解决这个问题,但没有一个有效。

这是我的JQuery代码:

          $.ajax({
                type: "POST",
                url: "/Services/Data_Services.asmx/AssignRoles",
                contentType: "application/json; charset=utf-8",
                data: JSON.stringify({ roleAssignments: roleassignments }),
                datatype: "json",
                success: function (data) {
                    alert("Group assignments successfully set");
                },
                error: function (response) {
                    alert(response.responseText);
                },
                failure: function (response) {
                    alert(response.responseText);
                }
            });

这输出: {" roleAssignments":[{" GROUPID":" 2""作用":" 4"&# 34; STAFFID":" 111"},{" GROUPID":" 2""作用":" 5& #34;" STAFFID":" 999"},{" GROUPID":" 2""作用" :" 6"" STAFFID":" 999"},{" GROUPID":" 2"&# 34;作用":" 7"" STAFFID":" 0"},{" GROUPID":" 2& #34;"作用":" 8"" STAFFID":" 999"},{" GROUPID" :" 2""作用":" 9"" STAFFID":" 15"}]}

(JSON有效。我已在JSONLint中检查过它)

这是.NET代码,它在反序列化函数中返回错误:

Public Function AssignRoles(ByVal roleAssignments As String) As String()
[.........] 

Dim aRoleList As New List(Of roleAssignments)
Dim js As New System.Web.Script.Serialization.JavaScriptSerializer
aRoleList = js.Deserialize(Of List(Of roleAssignments))(roleAssignments)

[.........]
End Function

Public Class roleAssignments
   Public Property groupid As String
   Public Property role As String
   Public Property staffid As String
End Class

关于我可以采取哪些措施来解决这个问题?我完全难以接受并且阅读其他示例,我似乎遵循正确的语法,但无法理解问题所在。

感谢。

1 个答案:

答案 0 :(得分:0)

我设法自己解决了这个问题。结果列表对象不是问题。这是我将JSON传递给Web服务的方式。我不得不转义引号并更改了JSON.stringify语法。传递给另一个JSON.stringify的JSON.stringify为引号添加了一个转义。

$.ajax({
                type: "POST",
                url: "/Services/Data_Services.asmx/AssignRoles",
                data: "{ \"roleJSON\": " + JSON.stringify(JSON.stringify(roleassignments)) + "}",
                dataType: "json",
                contentType: "application/json; charset=utf-8",
                success: function (data) {
                        // parse return data here....
                        showSuccessMessage("Group assignments set");
                },
                error: function (response) {
                    alert("Error occurred:" + response.responseText);
                },
                failure: function (response) {
                    alert("Insert failed: " + response.responseText);
                }
            });

我单独留下VB代码,除了从List声明中删除new关键字并更改传入的JSON字符串的名称。

 Dim aRoleList As List(Of roleAssignments)
 Dim returnedValue As New List(Of String)
 Try
     Dim js As New System.Web.Script.Serialization.JavaScriptSerializer
     aRoleList = js.Deserialize(Of List(Of roleAssignments))(roleJSON)
[.....]

我想发布解决方案,以便其他可能遇到同样问题的人可以解决这个问题。与开发一样,语法通常是罪魁祸首。