javascript - 反序列化: "Type Is not supported for deserialization of an Array"

标签 javascript asp.net json vb.net deserialization

当我单击删除图层的按钮时,此代码给我一条错误消息:

$scope.removeLayer = function () {
    var data = {'layerArr': convertedLayerArray,}}

我收到一条错误消息:

“数组的反序列化不支持类型‘WebCE.LayerArrVb’。”

这是相关的类、Web 方法和 ajax 调用:

Public Class LayerArrVb
Public Property absoluteEndM As Integer
Public Property absoluteStartM As Integer
Public Property endDate As String
Public Property endMetres As Integer
Public Property layerDate As String
Public Property name As String
Public Property startMetres As Integer
Public Property thickness As Integer
End Class


<WebMethod>
Public Function ChartInfo(layerArr As List(Of LayerArrVb)) As List(Of 
LayerArrVb)
    Return layerArr
End Function

由于 JSON 不兼容的日期格式,我必须创建 ConvertedLayerArray:

convertedLayerArray = [];
        for (let i = 0; i < layerArr2.length; ++i) {
            var convertedEndDate = new 
            Date(parseInt(layerArr2[i].endDate.substr(6)));
            var convertedEndDate2 = convertedEndDate.getFullYear() + ' ' + 
             (convertedEndDate.getMonth() + 1) + ' ' + 
             convertedEndDate.getDate();

            var convertedLayerDate = new 
             Date(parseInt(layerArr2[i].layerDate.substr(6)));
            var convertedLayerDate2 = convertedLayerDate.getFullYear() + ' 
            ' + (convertedLayerDate.getMonth() + 1) + ' ' + 
             convertedLayerDate.getDate();

            convertedLayerArray.push({
                "absoluteEndM": layerArr2[i].absoluteEndM,
                "absoluteStartM": layerArr2[i].absoluteStartM,
                "endDate": convertedEndDate2,
                "endMetres": layerArr2[i].endMetres,
                "layerDate": convertedLayerDate2,
                "name": layerArr2[i].name,
                "startMetres": layerArr2[i].startMetres,
                "thickness": layerArr2[i].thickness
            });
        }

        $.ajax({
            type: "POST",
            url: "WebService.asmx/ChartInfo",
            async: true,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            data: JSON.stringify({ "layerArr": convertedLayerArray}),
            success: function (data) {
                result = data;
            },
            error: function (a, b, c) {
                alert("Ajax call to ChartInfo failed");
            }
        });

谢谢

最佳答案

你应该添加<Serializable()>您的类(class)属性如下

<Serializable()>
Public Class LayerArrVb
Public Property absoluteEndM As Integer
Public Property absoluteStartM As Integer
Public Property endDate As String
Public Property endMetres As Integer
Public Property layerDate As String
Public Property name As String
Public Property startMetres As Integer
Public Property thickness As Integer
End Class

应用 SerializableAttribute类型的属性以指示该类型的实例可以序列化。 您可以从此 link 阅读它的文档

关于javascript - 反序列化: "Type Is not supported for deserialization of an Array",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56236356/

相关文章:

javascript - 如何获取开始标签内的文本并在jquery中进行更改?

json - 如何使用 R 解析 DataFrame 列中的 JSON

c# - 在 TextBox 中使用 Bind 在 TextBox 控件外呈现绑定(bind)数据

c# - 动态数据 IObjectContextAdapter 缺少引用

c# - 使用 linq 选择字典列表

java - 在 Java/Android 中测试空 JSON 对象

android - 将复杂的 JSON 字符串解码为各种对象

javascript - Rails - 渲染 Assets javascript

javascript - 预先输入建议,每个建议下方都有文字

javascript - 单击按钮时如何使输入中的文本进入段落