2011-11-28 91 views
3

我有一个实现Serializable一个VB.NET单例类:不能调用序列化的单例类的实例序列化()在VB.NET

Imports System.IO 
Imports System.Runtime.Serialization 

<Serializable()> Public Class CoordinateHistory 
    Private Shared _thisInstance As CoordinateHistory 

    Private gpsHistory As Dictionary(Of DateTime, GpsTimeCoordinate) 
    Private gpsTimes As List(Of DateTime) 

    Public Event NewStatusInformation(statusInfo As String) 

    Protected Sub New() 
     gpsHistory = New Dictionary(Of DateTime, GpsTimeCoordinate) 
     gpsTimes = New List(Of DateTime) 
    End Sub 

    Public Shared Function getInstance() As CoordinateHistory 
     If _thisInstance Is Nothing Then 
      _thisInstance = New CoordinateHistory 
     End If 

     Return _thisInstance 
    End Function 

    Public Function getHistoryCount() As Integer 
     Return gpsHistory.Count 
    End Function 

    ' bunch of other class functions below... 
End Class 

我的问题是,我不能真正称之为.Serialize()在这个类的实例上,就像在线演示的所有示例一样。我究竟做错了什么?谢谢!

+0

忘了问:你在使用什么序列化机制? –

+0

我想要做二进制序列化,但如果更容易,XML就没问题了。 –

回答

3

我相信这个问题是您的受保护的小组。如果将其更改为Public,则可能能够正确序列化。

更新

我没有使用BinaryFormatter的序列化的默认实例的任何问题:

Dim abData As Byte() 

Using oStream As New MemoryStream 
    Call (New BinaryFormatter).Serialize(oStream, CoordinateHistory.getInstance()) 

    abData = oStream.ToArray() 
End Using 

或XMLFormatter:

Dim sData As String 

Using oStream As New MemoryStream 
    Dim oSerializer As New XmlSerializer(CoordinateHistory.getInstance().GetType) 

    oSerializer.Serialize(oStream, CoordinateHistory.getInstance()) 

    sData = Encoding.Default.GetString(oStream.ToArray()) 
End Using 

或许是序列化框架您正在使用?

+0

我不认为就是这样。我试过了,我仍然无法调用'CoordinateHistory.getInstance().Serialize()'(或者只是在实际的实例上调用'.Serialize()')。 –

+0

以XML和二进制格式更新了示例代码序列化的响应。 –

+0

啊,一个评论:当我在本地测试这个时,我没有GpsTimeCoordinate,所以如果它没有使用我添加到我的答案中的方法序列化,那么问题将在该类中。 –

2

问题可能是您的课程公开活动。有一篇文章here描述了序列化VB.NET类与事件以及如何解决它们的问题。

编辑:另请参阅此可能相关question

+0

有趣...这看起来像一个潜在的陷阱。我会看一看,看看这是否有用。看起来我可能必须实现'ISerializable' ... –

+0

希望我能给你50%的功劳,因为你给出的建议在序列化之前删除事件处理程序的链接解决了我的问题的一部分。谢谢! –

+0

@MikeCialowicz没问题,很高兴帮助。 –

相关问题