2009-09-24 6 views
0

Je cherche un moyen de conserver les objets Silverlight sur le PC d'un utilisateur, puis de les réhydrater afin que l'utilisateur puisse finir de les éditer.Problème de sérialisation/désérialisation de Silverlight

Sérialisation avec DataContractSerializer et persistant à IsolatedStorageFile fonctionne très bien. Cependant, la désérialisation cause un problème. Voici le code qui provoque l'échec:

private string _FirstNames = string.Empty; 
public string FirstNames 
{ 
    get { return _FirstNames; } 
    set 
    { 
     new PersonNameValidator().Validate(value); //<-- BOOM 8(
     Set(ref _FirstNames, value,() => this.FirstNames); 
    } 
} 

Le désérialiseur appelle le poseur de propriété, ce qui jette une exception et annule la désérialisation.

J'ai essayé d'appliquer explicitement DataContract/DataMember/IgnoreDataMember attributs, mais il ne joue pas bien avec les champs privés:

System.Security.SecurityException produit Message = "Le type contrat de données « Trident.Model.Journey.JourneyApplication » ne peut pas être sérialisé parce que le membre « _TravellerSavingsAmount » est pas publique. le membre du public corrigera cette erreur. Sinon, vous pouvez le rendre interne, et utiliser l'attribut InternalsVisibleToAttribute sur votre assembly pour activer la sérialisation des membres internes - voir la documentation pour plus de détails. Soyez rend compte que cela a certaines conséquences sur la sécurité. »

Comment puis-je contourner les setters de propriété pendant désérialisation?

Je voudrais garder mes cours axés sur le domaine, et pas trop pollué avec problèmes d'infrastructure

Répondre

0

quelques idées:.

  • serialize une propriété qui est utilisée uniquement pour la sérialisation contournant ainsi tout va
  • sérialiser une classe parente et utiliser une classe dérivée pour la validation
+0

Thanks Joel. J'ai considéré le premier point, mais je n'aime pas l'idée d'ajouter des propriétés/champs publics supplémentaires uniquement pour prendre en charge la sérialisation. En ce qui concerne l'utilisation des classes dérivées: cela pourrait devenir lourd à mesure que mes graphiques d'objets augmentent en complexité. Je ne veux pas écrire une routine personnalisée pour gérer tous les graphiques d'objets que je crée. –

Questions connexes