【问题标题】:Dictionary is not supported for deserialization of an array数组的反序列化不支持字典
【发布时间】:2011-10-05 06:56:35
【问题描述】:

更新:

我有以下代码,我试图在其中使用returned JSON 数据,对其进行反序列化,并将该数据的一部分返回给用户。

<%@ Page Language="VB" Debug="True" EnableViewState="false" %>
<%@ Import Namespace="System.Web.Script.Serialization" %>

<script runat="server">
    Class Item
        Public Property some_number() As Double
            Get
                Return m_some_number
            End Get
            Set(ByVal value As Double)
                m_some_number = value
            End Set
        End Property
        Private m_some_number As Double
        Public Property some_text() As String
            Get
                Return m_some_text
            End Get
            Set(ByVal value As String)
                m_some_text = value
            End Set
        End Property
        Private m_some_text As String
        Public Property serial_number() As String
            Get
                Return m_serial_number
            End Get
            Set(ByVal value As String)
                m_serial_number = value
            End Set
        End Property
        Private m_serial_number As String
    End Class


    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        Response.Clear()
        Response.Write(set_profiles())
        Response.End()
    End Sub

    Function set_profiles() As String
        ' get returned json data
        Dim strChanged As String = CType(Request.Form("strChanged"), String)

        ' deserialize returned data
        Dim jss = New JavaScriptSerializer()

        ' assuming i need to change this line now?
        Dim dict As Dictionary = jss.Deserialize(List(Of Item))(strChanged)

        Return dict("some_number")
    End Function
</script>

我不明白如何反序列化到Item 类,然后如何取回数据。

【问题讨论】:

  • jsonText 是我上面贴的数据,有方括号的数据。
  • 我的意思是:它是哪种类型的?它是如何填充数据的?
  • 我通过 ajax (jquery) 以 json changed.push({some_number:id, date_time:$('input#' + mydate).val(), serial_number:the_serial}); 的形式将数据发送回服务器,然后我在客户端 $.ajax({ url: 'set_profile.aspx?rand=' + Math.random(), type: 'POST', dataType: 'json', data: { strChanged: JSON.stringify( changed ) }, 上像这样对它进行字符串化处理

标签: jquery .net vb.net json .net-3.5


【解决方案1】:

您的数据是一个数组,您正试图将其反序列化为字典。这行不通。

要么更改输入数据,要么将其反序列化为数组。

您也可以声明一个类并在反序列化中使用它。

C#,抱歉:

class Item
{
    public double some_number { get; set; }
    public string some_text { get; set; }
    public string serial_number { get; set; }
}

并反序列化为List(Of Item)

【讨论】:

  • 如何反序列化为数组?
  • jss.Deserialize(Of Item())(jsonText) 或者你在 VB 中使用Item[]
  • 我已经在 VB.NET 中创建了 Item 类,请参阅原始问题中的更新 1。我不确定如何做下一部分,即and deserialize to List(Of Item)
  • jss.Deserialize(Of List(Of Item))(jsonText)替换jss.Deserialize(Of Dictionary(Of String, String))(jsonText)
  • 我已经尝试过了,即Dim dict = jss.Deserialize(Of List(Of Item))(strChanged)but Return dict("some_number") 给出了错误。我可能没有存储到正确的变量?我也试过Dim dict As Item = jss.Deserialize(Of List(Of Item))(strChanged),但得到generic list cannot be converted to Item
猜你喜欢
  • 2019-10-07
  • 1970-01-01
  • 2014-06-30
  • 2014-10-28
  • 2014-11-07
  • 1970-01-01
  • 2017-10-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多