У меня была похожая проблема, когда пользователь отправлял сообщения в следующее местоположение:
Межпроцессное перетаскивание пользовательских типов объектов в 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.
При необходимости я могу предоставить содержимое своего пользовательского объекта, который я сериализую, для перетаскивания, если это поможет.
Спасибо
Кайл К.