我在这个问题上花了几天时间无济于事。我只需要在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
关于我可以采取哪些措施来解决这个问题?我完全难以接受并且阅读其他示例,我似乎遵循正确的语法,但无法理解问题所在。
感谢。
答案 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)
[.....]
我想发布解决方案,以便其他可能遇到同样问题的人可以解决这个问题。与开发一样,语法通常是罪魁祸首。