Я знаю, что было уже много дискуссий на эту тему, как этот:сериализации/десериализации список объектов с помощью BinaryFormatter
BinaryFormatter and Deserialization Complex objects
, но это выглядит очень сложным. Я ищу более простой способ сериализации и десериализации общего списка объектов в/из одного файла. Это то, что я пробовал:
public void SaveFile(string fileName)
{
List<object> objects = new List<object>();
// Add all tree nodes
objects.Add(treeView.Nodes.Cast<TreeNode>().ToList());
// Add dictionary (Type: Dictionary<int, Tuple<List<string>, List<string>>>)
objects.Add(dictionary);
using(Stream file = File.Open(fileName, FileMode.Create))
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(file, objects);
}
}
public void LoadFile(string fileName)
{
ClearAll();
using(Stream file = File.Open(fileName, FileMode.Open))
{
BinaryFormatter bf = new BinaryFormatter();
object obj = bf.Deserialize(file);
// Error: ArgumentNullException in System.Core.dll
TreeNode[] nodeList = (obj as IEnumerable<TreeNode>).ToArray();
treeView.Nodes.AddRange(nodeList);
dictionary = obj as Dictionary<int, Tuple<List<string>, List<string>>>;
}
}
сериализация работает, но десериализация завершается с ArgumentNullException. Кто-нибудь знает, как вытащить словарь и узлы дерева и отбросить их обратно, может быть с другим подходом, но также приятным и простым? Благодаря!
is 'obj' не null? – Reniuz
Да, кажется, что «obj» действительно был нулевым, но в моем чертовом взгляде это не так. : -S – betaFlux