0

我遇到了与在以下位置发布的用户类似的问题:

WinForms C#中自定义对象类型的跨进程拖放

幸运的是,我已经弄清楚如何序列化我的自定义对象的几乎所有部分,除了 SortedList 对象。

我需要这个对象,因为它包含一些对我的应用程序非常重要的信息,而且 Xml 嵌套非常混乱。

当我注释掉在 ISerializable 成员 GetObjectData() 中添加 SortedList 的行时,该对象会将其传递到新应用程序。当我把它留在里面时,它没有,而且我不知道如何让它序列化。

我在 StackOverflow 和网络上都做了一些查看,但没有发现任何用处。

我正在使用以下代码检查我的对象是否可序列化,以便可以将其拖放到另一个应用程序:

    /// <summary>
    /// Determine if object can be fully serializable to binary format.
    /// </summary>
    /// <param name="obj"></param>
    /// <param name="errorMsg">If return value false, contains reason for failure.</param>
    /// <returns></returns>
    public static bool IsSerializable(object obj, out string errorMsg)
    {
        errorMsg = "";

        using (MemoryStream mem = new MemoryStream())
        {
            BinaryFormatter bin = new BinaryFormatter();
            try
            {
                bin.Serialize(mem, obj);
                return true;
            }
            catch (Exception ex)
            {
                errorMsg = string.Format("Object cannot be serialized: {0}", ex.ToString());
                return false;
            }
        }
    }

有没有人有任何可以帮助我的建议?如果可能的话,我想在拖放过程中保持我的 XmlNode 列表完整,但不反对进行一些额外的编码以将其分解为可序列化的部分并在另一侧重建它。重要的是最终结果必须包含一个 SortedList。

如有必要,如果有帮助,我可以提供我正在序列化的自定义对象的内容以进行拖放。

谢谢,

凯尔K。

4

1 回答 1

0

I finally figured out how to correctly serialize my object. I was using a SortedList of XmlNodes, which I found out the XmlNode object is not serializable. I switched my implementation to contain a SortedList of strings, and now everything works just fine.

Thanks,

Kyle

于 2011-10-12T14:05:29.633 回答