2011-06-24 98 views
3

我有以下System.Collections.Specialized.NameValueCollection实例:如何将System.Collections.Specialized.NameValueCollection实例保存到硬盘并作为实例加载回来?

Dim UserSelection As New System.Collections.Specialized.NameValueCollection 

UserSelection.Add("D_Color1", "Black") 
UserSelection.Add("D_Color2", "Green") 
UserSelection.Add("D_Color3", "Purple") 

我需要保存这个实例的硬盘,然后加载它从硬盘恢复作为一个实例。我怎么做?

+1

为什么要一个字节数组?如果你需要它反序列化到一个不需要字节数组的NameValueCollection。 – RyanR

+0

xml怎么样?它的新方法来保存;-) – CrazyDart

+0

@CrazyDart我们可能不应该建议使用新的未经测试的技术。 –

回答

9

随着BinaryFormatter的

Using fs As New FileStream("DataFile.dat", FileMode.Create) 
    Dim formatter As New BinaryFormatter 
    formatter.Serialize(fs, UserSelection) 
End Using 

和反序列化

Using fs As New FileStream("DataFile.dat", FileMode.Open) 
    Dim formatter As New BinaryFormatter 
    UserSelection = DirectCast(formatter.Deserialize(fs), NameValueCollection) 
End Using 
+0

这个工程,我试过了。 – CrazyDart

+0

+1,谢谢它的作品! – Predator

2

通过对Serializible的魔力,你可以写一个集合序列化格式,即保存到磁盘,把它在网络上,无论如何,然后将其反序列化为一个新的NameValueCollection实例。由于Serializable的写法,你可以控制它是如何被持久化的。为了让它序列化为XML,你必须编写(或谷歌)一小段代码,其中implements IXmlSerializable for a NameValueCollection。序列化到binary开箱即用:

Dim fs as New FileStream("MyNameValueCollection.bin", FileMode.Create) 
Dim bs as New BinaryFormatter() 
bs.Serialize(fs, UserSelection) 
fs.Close() 
+1

这没有用?作为OP的相关文档的链接以及XML和二进制的例子都没有意识到他可以使用除字节数组以外的东西。 – RyanR

+0

+1,你的回答是有帮助:) – Predator

+0

感谢Predator,试图找出为什么有人投票下来 – RyanR

相关问题