gpt4 book ai didi

c# - 通过 BinaryFormatter 反序列化 MemoryStream

转载 作者:行者123 更新时间:2023-11-30 20:00:41 24 4
gpt4 key购买 nike

没有找到解决以下问题的方法。
我有一个用于在文件中保存/加载 TreeView 的工作代码,但我想将它保存到 Properties.Settings.Default。

不幸的是,我在这一行中收到错误“没有对象映射”:

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);
}
}

有人知道吗?
提前致谢。

最佳答案

试试这个

    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());
}
}

关于c# - 通过 BinaryFormatter 反序列化 MemoryStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20442627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com