如何反序列化包含两个数组的JSON对象

时间:2015-08-18 20:43:08

标签: json asp.net-mvc vb.net

我正在使用VB.Net,MVC 5.我正在创建一个javaScript对象,然后使用ajax和JSON将该对象传递给我的控制器。

我的对象是这样创建的:

var myEdits = {
                    arrayOfIDs: [],
                    arrayOfValues : []
                };

这是我将对象发送到服务器的方式:

$.ajax({
                url: '/ViewDetails/EditConfirmation',
                type: 'POST',
                data: { 'myEdits': myEdits }
            })
                .success(function (result) {
                    alert("success");
                })
                .error (function (status) {
                    alert(status);
                })

我的字符串在点击服务器时看起来像这样:

  

" {" arrayOfIDs":[" 53"" 54"" 55"" 56& #34]," arrayOfValues":["富""杆"" NARF""哇噢" ]}"

我尝试过创建这样的课程:

    Function CompareEdits(myEdits As Object) As IEnumerable(Of compareEdits)
        Dim serializer As New JavaScriptSerializer()

        Dim model As compareEdits
        model = serializer.Deserialize(Of compareEdits)(myEdits)

        Return model
    End Function

End Class

Public Class compareEdits
    Public Property arrayOfIDs As List(Of String)
    Public Property arrayOfValues As List(Of String)
End Class

我也试过这样反序列化:

    Function CompareEdits(myEdits As Object) As IEnumerable(Of compareEdits)
        Dim serializer As New JavaScriptSerializer()

        Dim model
        model = serializer.Deserialize(Of Array)(myEdits)

        Return model
    End Function

当我尝试反序列化我的JSON字符串时,我一直收到此错误:

  

{"转换类型'字符串()'输入' String'无效。"}

字符串中的第一个数组用于决定要更新的字段,字符串中的第二个数组是实际值。

如何正确反序列化此字符串?

1 个答案:

答案 0 :(得分:1)

你的第一次尝试大多是正确的:

' the serialized data is string, dont box it
' the return is a Type containing the Lists/Arrays
Function CompareEdits(myEdits As String) As compareEdits
    Dim serializer As New JavaScriptSerializer()

    Dim model = serializer.Deserialize(Of compareEdits)(myEdits)

    Return model
End Function

返回Type肯定是错误的:您反序列化为包含2个数组/列表的Type,因此As IEnumerable不正确。

我不确定你为什么会得到错误或在哪里,我在没有这两个方面的情况下偶然输入了它并且它工作正常。提到的错误可能是由第二种方法引起的。