Как я могу записать хэш-таблицу в файл, не зная, что в нем?!Как написать Hashtable в файл?
Hashtable DTVector = new Hashtable();
просто сохраните это в файле, затем прочитайте его и создайте хэш-таблицу снова.
Как я могу записать хэш-таблицу в файл, не зная, что в нем?!Как написать Hashtable в файл?
Hashtable DTVector = new Hashtable();
просто сохраните это в файле, затем прочитайте его и создайте хэш-таблицу снова.
Если вы храните только парные разряды в своей 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});
Вы будете встречены с исключением при вызове Последовательность:
Тип 'SomeData' в сборке 'blah' не обозначен как serializable.
Вы можете следить за подсказку, указанную в сообщении исключения, добавив атрибут Serializable к классу
[Serializable]
public class SomeData
{
public Double Value {get;set;}
public override string ToString()
{
return String.Format("Awesome! {0}", Value);
}
}
В конечном счете, я думаю, что для легкости объектов можно создавать объекты, которые должны быть сериализуемыми. Вы могли бы использовать что-то вроде реализации protobuf dotnet, чтобы сохранить его более эффективно, чем просто простой дамп в файл.
Смотрите обсуждение здесь: http://stackoverflow.com/questions/10615896/serialize-hashtable -using-protocol-buffers-net автор поставил решение. Я не могу говорить о его качестве. –
Знаете ли вы, какие типы будут в нем? Я не имею в виду точные экземпляры, только возможные типы на нем (классы, которыми вы владеете, рамки classess ...) – Gusman
@ Gusman что-то вроде 2D-массива. –