2010-08-21 4 views
0

DataContractJsonSerializer를 사용하여 구조체 형식을 serialize 할 수 있는지 또는 참조/클래스 형식이어야하는지 궁금합니다.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 문을 통해 aspx.vb 파일에 DLL/네임 스페이스를 가져 왔는데이 오류가 발생했습니다. web.config에서'\ system.web \ pages \ namespaces' 가져 오기와 같은 가져 오기를 추가 한 다음 정상적으로 작동합니다. 분명히 ASP.NET에서는 VB 파일의 Import 문을 통하지 않고 web.config를 통해 네임 스페이스를 가져와야합니까? 이상한. – eidylon

관련 문제