0

List(Of Int32)を使用してシリアル化しようとしていJavaScriptSerializerます。オブジェクトをリストに戻そうとするまではうまくいくようですがDeserialize、その時点で次のエラーが発生します。

タイプ 'System.Collections.ArrayList' のオブジェクトをタイプ 'System.Collections.Generic.List`1[System.Int32]' にキャストできません。

私のコードは以下です。正しい型に明示的にキャストした場合でも、リストが自動的に ArrayList として保存される理由を誰か説明してもらえますか?

前もって感謝します。

Private Property _serialized As String
    Get
        Return ViewState("_serialized")
    End Get
    Set(value As String)
        ViewState("_serialized") = value
    End Set
End Property

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
        Dim l As New List(Of Int32) From {2, 4, 6, 8, 10}
        Dim d As New Dictionary(Of String, Object)
        d.Add("myList", l)
        Dim js As New Script.Serialization.JavaScriptSerializer
        Me._serialized = js.Serialize(d)
    End If
End Sub

Protected Sub btn_Click(sender As Object, e As EventArgs) Handles btn.Click
    Dim js As New Script.Serialization.JavaScriptSerializer
    Dim d As Dictionary(Of String, Object) = js.Deserialize(Of Dictionary(Of String, Object))(Me._serialized)
    Dim l As List(Of Int32) = CType(d.Item("myList"), List(Of Int32))
    For Each i As Int32 In l
        Trace.Warn(i.ToString)
    Next
End Sub

エラー行は次のとおりです。

Dim l As List(Of Int32) = CType(d.Item("myList"), List(Of Int32))
4

1 に答える 1

1

JSON はサーバー側の表現を保存しません。それがリストであることを知らないので、ジェネリックにする必要があります。しかし、あなたはそれを取り戻すためにこれを行うことができるはずです:

Ctype(d.Item("myList"), ArrayList).Cast(Of Integer)().ToList()
于 2013-08-28T15:26:48.720 に答える