【问题标题】:Cross-Process Drag and Drop of custom object type contain sorted list of XmlNodes in WinForms C#自定义对象类型的跨进程拖放包含 WinForms C# 中 XmlNodes 的排序列表
【发布时间】:2011-05-25 20:23:34
【问题描述】:

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

Cross-Process Drag and Drop of custom object type in 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;
            }
        }
    }

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

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

谢谢,

凯尔·K。

【问题讨论】:

    标签: drag-and-drop c#-2.0 iserializable


    【解决方案1】:

    我终于想出了如何正确序列化我的对象。我使用的是 XmlNodes 的 SortedList,我发现 XmlNode 对象不可序列化。我将我的实现切换为包含一个 SortedList 字符串,现在一切正常。

    谢谢,

    凯尔

    【讨论】:

      猜你喜欢
      • 2011-01-07
      • 2012-05-10
      • 2015-07-04
      • 2013-05-06
      • 2023-04-01
      • 2020-01-10
      • 1970-01-01
      • 2010-10-22
      • 1970-01-01
      相关资源
      最近更新 更多