Ошибка сериализации при копировании и вставке из элемента управления Windows form в элемент управления WPF

#c# #wpf #.net-5

Вопрос:

У нас есть сериализуемый класс, который содержит данные из буфера обмена для передачи из элемента управления Windows в элемент управления WPF. Это сработало в framework 4.8 после преобразования в .Net 5 мы теперь получаем ошибку: Введите «System.RuntimeType» в сборке «Система».Частное.CoreLib, Версия=5.0.0.0, Культура=нейтральная, PublicKeyToken=7cec85d7bea7798e’ не помечен как сериализуемый.

Это происходит в обработчике событий Drop в WPF в строке:

var tClip = e.Data.GetDataPresent(typeof(ClipboardDescriptor));

Где «е» — это Система.Windows.ДрагЕвентАрги.

 using System; using System.Windows.Forms;  namespace Support.Classes {  /// lt;summarygt;  /// Summary description for ClipboardDescriptor.  /// lt;/summarygt;  [Serializable]  public class ClipboardDescriptor  {  private Guid id;  private Guid parentDocumentID;  private System.Type objtype;  private TreeNode baseTreeNode;  private string objname;   public ClipboardDescriptor()  {  baseTreeNode = null;  }   public Guid ParentDocumentID  {  get { return(parentDocumentID); }  set { parentDocumentID = value; }  }   public Guid ID  {  get { return(id); }  set { id = value; }  }   public System.Type ObjType  {  get { return(objtype); }  set { objtype = value; }  }   public string ObjName  {  get { return(objname); }  set { objname = value; }  }   /// lt;summarygt;  /// Get the treenode that this object is associated with  /// lt;/summarygt;  public TreeNode BaseTreeNode  {  get { return(baseTreeNode); }  set { baseTreeNode = value; }  }  } }  

Комментарии:

1. Вероятно, это связано с тем, что некоторые типы свойств отличаются пространством имен между .net 4.8 и dotnet 5

2. Это была Система. Свойство типа и свойство TreeNode.

Ответ №1:

Это и есть решение проблемы. В этом случае, к счастью, свойство TreeNode было ненужным, и можно было добавить свойство TypeName, чтобы из него можно было извлечь тип.

 using System;  namespace JMPT.Support.Classes {  /// lt;summarygt;  /// Summary description for ClipboardDescriptor.  /// lt;/summarygt;  [Serializable]  public class ClipboardDescriptor  {  public Guid ParentDocumentID { get; set; }  public Guid ID { get; set; }  [field: NonSerialized]  public Type ObjType { get; set; }  public string ObjName { get; set; }  public string ObjTypeName { get; set; }  } }