2013-12-07 4 views
2

не нашел решение следующей проблемы.
У меня был рабочий код для сохранения/загрузки TreeView в файле, но я хочу сохранить его в Properties.Settings.Default.Deserialization MemoryStream через BinaryFormatter

К сожалению, я не получаю ошибку «нет карты для объекта» в этой строке:

object obj = bf.Deserialize(ms); 

Вот полный код (де) сериализации:
Не знаю, как решить эту. :(

public static void SaveTreeView(TreeView tree) 
{ 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     BinaryFormatter bf = new BinaryFormatter(); 
     bf.Serialize(ms, tree.Nodes.Cast<TreeNode>().ToList()); 
     ms.Position = 0; 
     var sr = new StreamReader(ms); 
     Properties.Settings.Default.tree = sr.ReadToEnd(); 
     Properties.Settings.Default.Save(); 
    } 
} 

public static void LoadTreeView(TreeView tree) 
{ 

    using (MemoryStream ms = new MemoryStream()) 
    { 
     var sw = new StreamWriter(ms); 
     sw.WriteLine(Properties.Settings.Default.tree); 
     sw.Flush(); 
     ms.Seek(0, SeekOrigin.Begin); 

     BinaryFormatter bf = new BinaryFormatter(); 
     object obj = bf.Deserialize(ms); 

     TreeNode[] nodeList = (obj as IEnumerable<TreeNode>).ToArray(); 
     tree.Nodes.AddRange(nodeList); 
    } 
} 

Кто-нибудь получил идею
Спасибо это заранее

ответ

6

Попробовать это

public static void SaveTree(TreeView tree) 
    { 
     using (var ms = new MemoryStream()) 
     { 
      new BinaryFormatter().Serialize(ms, tree.Nodes.Cast<TreeNode>().ToList()); 

      Properties.Settings.Default.tree = Convert.ToBase64String(ms.ToArray()); 
      Properties.Settings.Default.Save(); 
     } 
    } 

    public static void LoadTree(TreeView tree) 
    { 
     byte[] bytes = Convert.FromBase64String(Properties.Settings.Default.tree); 
     using (var ms = new MemoryStream(bytes, 0, bytes.Length)) 
     { 
      ms.Write(bytes, 0, bytes.Length); 
      ms.Position = 0; 
      var data = new BinaryFormatter().Deserialize(ms); 
      tree.Nodes.AddRange(((List<TreeNode>)data).ToArray()); 
     } 
    } 
+0

Это код, который я модифицирована для использования с MemoryStream Так что да,?.. Это то, что Я хочу в переменной вместо файла. =) –

+0

Я обновил свой ответ ... извините за это – PCG

+0

Спасибо, отлично работает! Должен был подумать об этом преобразовании base64 ранее. знак равно –

Смежные вопросы