Межпроцессное перетаскивание пользовательских типов объектов содержит отсортированный список узлов Xml в WinForms C # - PullRequest
0 голосов
/ 26 мая 2011

У меня была похожая проблема, когда пользователь отправлял сообщения в следующее местоположение:

Межпроцессное перетаскивание пользовательских типов объектов в WinForms C #

К счастью, я понял, как сериализовать почти все части моего пользовательского объекта, кроме объекта SortedList.

Мне нужен этот объект, потому что он содержит довольно важную информацию для моего приложения, а вложение Xml довольно грязное.

Когда я закомментирую строку, добавляющую SortedList в ISerializable, член GetObjectData (), объект переходит в новое приложение. Когда я оставляю это, это не так, и я не могу понять, как его сериализовать.

Я немного посмотрел и здесь, и в 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.

При необходимости я могу предоставить содержимое своего пользовательского объекта, который я сериализую, для перетаскивания, если это поможет.

Спасибо

Кайл К.

1 Ответ

0 голосов
/ 12 октября 2011

Я наконец понял, как правильно сериализовать мой объект. Я использовал SortedList XmlNodes, который я обнаружил, что объект XmlNode не сериализуем. Я переключил свою реализацию, чтобы она содержала SortedList строк, и теперь все работает просто отлично.

Спасибо

Кайл

...