2010-08-21 100 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

相关问题