gpt4 book ai didi

c# - 序列化 TreeView 时丢失数据

转载 作者:太空宇宙 更新时间:2023-11-03 15:33:48 25 4
gpt4 key购买 nike

我正在用 C# 编写一个程序,它将数据分配给一个类,然后将该类分配给 TreeView 节点的标签值。

我可以使用我在此处找到的答案将我的 TreeView 序列化为文件:Saving content of a treeview to a file and load it later .

但是,在反序列化文件时使用此方法丢失了所有节点的 Tag,或者更可能的是,它们根本就没有被序列化。

使用此方法序列化时是否可以保留节点的 Tag 值?如果是,怎么办?

最佳答案

BinaryFormatter成功序列化, 你的 Tag对象必须标记为 [Serializable] , 这表明它可以通过序列化其公共(public)和私有(private)字段 来成功序列化和反序列化。如果它被如此标记,那么它被序列化为TreeNode的一部分,如reference source所示。 :

[TypeConverterAttribute(typeof(TreeNodeConverter)), Serializable,
DefaultProperty("Text"),
SuppressMessage("Microsoft.Usage", "CA2240:ImplementISerializableCorrectly")]
public class TreeNode : MarshalByRefObject, ICloneable, ISerializable {

object userData;

protected virtual void Serialize(SerializationInfo si, StreamingContext context) {

// SNIP storage of irrelevant fields.

if (userData != null && userData.GetType().IsSerializable) {
si.AddValue("UserData", userData, userData.GetType());
}
}

public object Tag {
get {
return userData;
}
set {
userData = value;
}
}
}

请注意,如果您的 Tag 对象不可可序列化,它将被静默跳过;不会抛出异常。

关于c# - 序列化 TreeView 时丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32621788/

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