如何在不知情的情况下将哈希表写入文件中 里面有什么?!
Hashtable DTVector = new Hashtable();
只需将其存储到文件中,然后再读取它并再次创建哈希表。
答案 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实现的东西来存储它,而不仅仅是对文件的普通转储。