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
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. –