2010-08-21 80 views
0

我想知道是否可以使用DataContractJsonSerializer來序列化一個結構類型,還是它必須是一個引用/類類型?我可以在VB.NET中使用Structure的擴展方法嗎?

我有以下代碼:

<Extension()> Public Function ToJSON(ByVal target As Object) As String 
    Dim serializer = New System.Runtime.Serialization.Json.DataContractJsonSerializer(target.GetType) 
    Using ms As MemoryStream = New MemoryStream() 
     serializer.WriteObject(ms, target) 
     ms.Flush() 

     Dim bytes As Byte() = ms.GetBuffer() 

     Dim json As String = Encoding.UTF8.GetString(bytes, 0, bytes.Length).Trim(Chr(0)) 

     Return json 
    End Using 
End Function 

。不過,如果我把它放在一個結構類型,如KeyValuePair(中T1,T2),我收到以下錯誤:

Public member 'ToJSON' on type 'KeyValuePair(Of String,Object)' not found.

回答

2

錯誤消息與DataContractJsonSerializer或您的方法內部沒有任何關係。它無法找到方法本身。這對我意味着你已經忘記添加一個對定義這個擴展方法的命名空間的引用。我很抱歉,我不知道VB的等價物,但在C#中,我正在談論的是using條款。

+0

嗯......奇怪。你是對的,那是問題所在。這確實教會了我一些我沒有意識到的東西。擴展名是DLL中公共模塊的公共函數。通過文件頂部的Import語句將DLL /名稱空間導入到我的aspx.vb文件中,並且出現此錯誤。我在web.config中添加了與'\ system.web \ pages \ namespaces'導入相同的導入,然後它正常工作。很顯然,在ASP.NET中,您需要通過web.config導入您的名稱空間,而不是通過VB文件中的Import語句導入?奇。 – eidylon 2010-08-21 03:16:24

相關問題