2013-08-28 39 views
0

我在嘗試使用JavaScriptSerializer來序列化List(Of Int32)。它似乎工作,直到我試圖Deserialize對象回到名單,在這一點上,我得到這個錯誤:List(Int32)爲什麼將JSON序列化爲ArrayList?

Unable to cast object of type 'System.Collections.ArrayList' to type '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)) 

回答

1

JSON不存儲在服務器側表示;它不會知道它是一個List,所以它必須通用。但你應該能夠做到這一點把它拿回來:

Ctype(d.Item("myList"), ArrayList).Cast(Of Integer)().ToList() 
+0

太棒了。我已經使用.NET近十年了,從來不知道'.Cast(Of Integer)'。像魅力一樣工作 - 非常感謝你! – EvilDr

相關問題