我正在使用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'无效。"}
字符串中的第一个数组用于决定要更新的字段,字符串中的第二个数组是实际值。
如何正确反序列化此字符串?
答案 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
不正确。
我不确定你为什么会得到错误或在哪里,我在没有这两个方面的情况下偶然输入了它并且它工作正常。提到的错误可能是由第二种方法引起的。