C # - десериализация класса с внутренним конструктором - PullRequest
2 голосов
/ 02 февраля 2010

Я работаю над системой перетаскивания для моего приложения WPF.

Вот как это работает:

  1. Я беру перетаскиваемый предмет
  2. Сериализуем его в xml
  3. Когда он падает, я снова десериализую его.

В моем тестовом приложении это работало нормально.Однако теперь, когда я пытаюсь сделать это в своем реальном приложении, я столкнулся с проблемой.Класс, который я пытаюсь десериализовать (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

Я тост?Есть ли способ десериализации этого класса?Любые другие идеи о том, как передать этот класс с помощью перетаскивания?(Я использую советники Draid and Drop FluidKit.)

1 Ответ

3 голосов
/ 02 февраля 2010

Я немного поработал с классом FieldDefinition, и наименьшей из проблем, с которыми вы столкнетесь при сериализации XML, является внутренний конструктор. Это очень сложный тип, который обычно имеет (косвенно) ссылки на значения COM и несколько дескрипторов GC. Просто не будет легко сериализовать экземпляры типа.

Что вы можете сделать, так это сериализовать ReferenceName FieldDefinition. Затем вы можете использовать это для перестройки объекта FieldDefinition на более позднем этапе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...