SerializationInfo.AddValue()中的name参数可以是任意的吗?

时间:2015-08-13 03:58:13

标签: c# serialization

我正在尝试序列化TreeView对象中的所有TreeNodes。麻烦的是,如果节点具有相同的名称,则会抛出SerializationException。

public void GetObjectData(SerializationInfo info, StreamingContext context)
    {
        try
        {
            foreach (TreeNode node in this.Nodes)
            {
                info.AddValue(node.FullPath, node);
            }
        }
catch (Exception ex)
        {
            if (ex.Message == "Cannot add the same member twice to a SerializationInfo object.")
            {
                MessageBox.Show("You cannot save more than one gallery with the same name.  Change the name(s) and try again.");
            }
        }
    }

使用AddValue()添加对象时,我可以将名称设为任意名称,以免发生冲突吗?

如果做错了,建议的解决方案是什么?

1 个答案:

答案 0 :(得分:1)

是的,名称可以是'任意' - 名称可以在同一序列化信息中重复。

请参阅SerializationInfo.AddValue Method (String, Object)

  

[引发] SerializationException [if]一个值已经与name关联。

  

如果添加两个名称仅按大小写不同的值,则不会抛出任何异常,这不是推荐的做法。但是,添加两个具有完全相同名称的值将导致抛出SerializationException。

这是因为SerializationInfo充当字典/关联数组。