C# - 使用内部构造函数反序列化类

时间:2010-02-02 17:35:08

标签: c# xml serialization xml-serialization constructor

我正在为我的WPF应用程序设计一个拖放系统。

它的工作方式是:

  1. 我采取拖动的项目
  2. 将其序列化为xml
  3. 当它被删除时,我再次反序列化。
  4. 这在我的测试应用中运行良好。但是,现在我正在尝试在我的真实应用程序中执行此操作,我遇到了障碍。我试图反序列化的类(Microsoft.TeamFoundation.WorkItemTracking.Client.FieldDefinition)没有公共构造函数。

    当我尝试使用此代码反序列化它时:

    XmlReader reader = XmlReader.Create(new StringReader(xamlString));
    object elt = XamlReader.Load(reader);
    

    我收到此错误:

    Cannot create object of type 
    'Microsoft.TeamFoundation.WorkItemTracking.Client.FieldDefinition'. 
    CreateInstance failed, which can be caused by not having a public default 
    constructor for 'Microsoft.TeamFoundation.WorkItemTracking.Client.FieldDefinition
    

    我吐司吗?有没有办法反序列化这个类?关于如何通过拖放转移这个类的任何其他想法? (我正在使用FluidKit Drag and Drop Advisers。)

1 个答案:

答案 0 :(得分:3)

我已经使用FieldDefinition类了很多,而且你对XML序列化的问题最少的是内部构造函数。这是一种非常复杂的类型,通常具有(间接)COM值和几个GC句柄的引用。序列化该类型的实例并不容易。

您可以做的是序列化FieldDefinition的ReferenceName。然后,您可以使用它在以后重建FieldDefinition对象。