2010-02-02 6 views
2

Je travaille sur un système de glisser-déposer pour mon application WPF.C# - Désérialise une classe avec un constructeur interne

Le fonctionnement est le suivant:

  1. Je prends l'article traîné
  2. sérialiser au format XML
  3. Quand il est tombé, je désérialiser à nouveau.

Cela a bien fonctionné dans mon application de test. Cependant, maintenant que j'essaie de le faire dans ma vraie application, j'ai rencontré un problème. La classe que j'essaie de désérialiser (Microsoft.TeamFoundation.WorkItemTracking.Client.FieldDefinition) n'a pas de constructeur public.

Lorsque je tente de désérialiser en utilisant ce code:

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

Je reçois cette erreur:

 
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 

Suis-je porter un toast? Y a-t-il un moyen de désérialiser cette classe? D'autres idées sur la façon de transférer cette classe par glisser-déposer? (J'utilise les conseillers FluidKit Drag and Drop.)

Répondre

3

J'ai travaillé avec la classe FieldDefinition un peu et le moindre des problèmes que vous aurez avec la sérialisation XML est le constructeur interne. C'est un type très complexe qui a généralement des références (indirectement) aux valeurs COM et plusieurs poignées GC. Il ne sera simplement pas facile de sérialiser les instances du type.

Ce que vous pouvez faire est cependant sérialiser le ReferenceName du FieldDefinition. Vous pouvez ensuite l'utiliser pour reconstruire l'objet FieldDefinition ultérieurement.

+0

Bonne idée! Je vais aller avec ça. Merci pour le conseil. – Vaccano

Questions connexes