2011-05-05 1 views
1

В моих C# WinForms у меня есть дерево и я сохраняю содержимое TreeView в виде сериализованного файла. Вот мой код:Добавление дополнительных данных в контрольный контент Serialized как комментарий

Сериализация и сохранить

List<TreeNode> treeNode = new List<TreeNode>(); 

foreach (TreeNode node in treeViewFiles.Nodes) 
{ 
    treeNode.Add(node); 
} 

//Serialize az binary 
using (Stream file = File.Open(saveList.FileName, FileMode.Create)) 
{ 
    BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(file, treeNode); 
} 

десериализации и нагрузки

BinaryFormatter bf = new BinaryFormatter(); 

object obj = bf.Deserialize(file); //file is path to file (came from openfiledialog 
TreeNode[] nodeList = (obj as IEnumerable<TreeNode>).ToArray(); 

//Add nodes to tree 
treeViewFiles.Nodes.AddRange(nodeList); 

Вопрос

Так что я теперь есть хороший сохранить и функцию загрузки , Но мне нужно добавить некоторые o эти данные в тот же файл. Например, я хочу добавить некоторые строки в один и тот же файл, и когда они будут загружены, появится всплывающее окно с сообщением, например, имя пользователя, который сохранил этот файл, и некоторые другие вещи. Было бы возможно? Любые советы и коды приветствуются!

ответ

3

Вы думаете об этом неправильно. Вместо того, чтобы добавлять аннотации к сериализованному файлу, просто создайте новый сериализуемый класс с дополнительной информацией, которая вам нужна, которая инкапсулирует данные, которые вы хотите сериализовать, а затем сериализуйте.

Например

public class SavedData<T>{ 
    private List<T> _nodes; 
    private DateTime _saveTime; 

    public List<T> Nodes{ 
    get{ return _nodes;} 
    } 

    public DateTime SaveTime{ 
    get{return _saveTime;} 
    } 

    public SavedData(List<T> nodes, string savedBy){ 
    _nodes = nodes; 
    _savedBy = savedBy; 
    _saveTime = DateTime.Now; 
    } 
} 

Тогда вместо сохранения TreeNode сохранить SavedData

BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(file, new SavedData<TreeNode>(treeNode)); 

Я не пробовал компилировать любой из этого, но это, вероятно, в основном верно ....

+0

Большое спасибо, да, я думаю, что думал неправильно. Я попробую это скоро. На данный момент вы можете сказать, что это подчеркивает перед полями? –

+0

Это просто стандарт кодирования, который мы используем на работе - он обозначает частные поля. Это просто быстрый способ узнать, с чем вы работаете, является личным для класса. –