2012-06-03 17 views
1

我有下面的代码的邮件列表转换成json如何在VB.NET序列清单JSON

Public Class MessageService 
    <OperationContract()> _ 
    Public Function GetMessage(Id As Integer) As String 



     Dim msg As New Message() 
     Dim stream As New MemoryStream() 
     Dim serializer As New DataContractJsonSerializer(GetType(NewMessage)) 

     Dim dtMessages = msg.getUnreadMessages("3A3458") 

     Dim list As New ArrayList 

     Dim m As New NewMessage() 
     m.Id = 1 
     m.Text = "mmsg" 
     list.Add(m) 
     list.Add(m) 
     serializer.WriteObject(stream, list) 

     stream.Position = 0 
     Dim streamReader As New StreamReader(stream) 
     Return streamReader.ReadToEnd() 
    End Function 
End Class 

但我得到了以下错误:

The server was unable to process the request due to an internal error. 
For more information about the error, either turn on IncludeExceptionDetailInFaults (either from ServiceBehaviorAttribute or from the <serviceDebug> configuration behavior) on the server in order to send the exception information back to the client, 
or turn on tracing as per the Microsoft .NET Framework 3.0 SDK documentation and inspect the server trace logs. 

回答

2

这里:

Dim serializer As New DataContractJsonSerializer(GetType(NewMessage)) 

您向序列化程序指示要序列化一个NewMessage实例。

在这里:

serializer.WriteObject(stream, list) 

你逝去的Arraylist。这显然是不明确的。我建议你修改你的方法,让它直接返回一个强类型集合并留下JSON序列化的结合,而不需要编写管道代码在你的数据契约:

Public Class MessageService 
    <OperationContract()> _ 
    Public Function GetMessage(Id As Integer) As List(Of NewMessage) 
     Dim list As New List(Of NewMessage) 
     Dim m As New NewMessage() 
     m.Id = 1 
     m.Text = "mmsg" 
     list.Add(m) 

     Return list 
    End Function 
End Class 
+0

感谢您的答复,但在此之后,在我们使用序列化器? – Adham

+0

您可以使用webHttpBinding:http://www.codeproject.com/Articles/327420/WCF-REST-Service-with-JSON –