#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; } } }