如何将Hashtable写入文件?

时间:2015-08-29 07:51:37

标签: c# file hashtable

如何在不知情的情况下将哈希表写入文件中 里面有什么?!

Hashtable DTVector = new Hashtable();

只需将其存储到文件中,然后再读取它并再次创建哈希表。

2 个答案:

答案 0 :(得分:5)

如果您只在Hashtable中存储双打,则可以使用BinaryFormatter serialize and deserialize数据结构。

Hashtable DTVector = new Hashtable();

DTVector.Add("key",12);
DTVector.Add("foo",42.42);
DTVector.Add("bar",42*42);

// write the data to a file
var binformatter = new  System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
using(var fs = File.Create("c:\\temp\\vector.bin"))
{
    binformatter.Serialize(fs, DTVector);
}

// read the data from the file
Hashtable vectorDeserialized = null;
using(var fs = File.Open("c:\\temp\\vector.bin", FileMode.Open))
{
     vectorDeserialized = (Hashtable) binformatter.Deserialize(fs);
}

// show the result
foreach(DictionaryEntry entry in vectorDeserialized)
{
    Console.WriteLine("{0}={1}", entry.Key,entry.Value);
}

请记住,添加到Hashtable的对象需要可序列化。 .Net框架中的值类型是和其他一些类。

如果您已经创建了自己的类:

public class SomeData
{
    public Double Value {get;set;}
}

你可以像这样在Hashtable中添加一个实例:

DTVector.Add("key",new SomeData {Value=12});

调用Serialize:

时会遇到异常
  

在程序集'blah'中键入'SomeData'未标记为可序列化。

您可以通过向您的班级添加属性Serializable来关注异常消息中所述的提示

[Serializable]
public class SomeData
{
    public Double Value {get;set;}
    public override string ToString()
    {
       return String.Format("Awesome! {0}", Value );
    }
}

答案 1 :(得分:0)

最终我认为能够轻松地编写出需要序列化的对象。您可以使用类似dotnet protobuf实现的东西来存储它,而不仅仅是对文件的普通转储。