.NET服务中的JSON反序列化-can'不能解决这个问题

JSON Deserialization in .NET service - can't solve this issue

本文关键字:不能 解决 问题 服务 JSON -can 反序列化 NET      更新时间:2024-05-22

我在这个问题上花了几天时间,但都无济于事。我只需要在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);
                }
            });

该输出:{"角色分配":[{"groupid":"2","role":"4","staffid":"},{"groupid":"2","role":"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

我能做些什么来解决这个问题吗?我完全被难住了,从阅读其他例子中,我似乎遵循了正确的语法,但不明白问题是什么

谢谢。

我自己设法解决了这个问题。事实证明List对象不是问题所在。这就是我将JSON传递到web服务的方式。我不得不转义引号,并更改了JSON.stringify语法。传入另一个JSON.stringify的JSON.sStringify为引号添加了一个转义符。

$.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);
                }
            });

除了从List声明中删除新关键字并更改传入的JSON字符串的名称外,我没有使用VB代码

 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)
[.....]

我想发布解决方案,这样任何其他可能有同样问题的人都可以弄清楚。和通常的开发一样,语法通常是罪魁祸首。