Je suis en train d'utiliser XmlSerializer
de C# pour sauver une classe qui a certaines valeurs qui sont lues par des propriétés (le code étant juste une simple extraction de la valeur sur le terrain), mais mis par les fonctions setter (puisqu'il y a un délégué appelé si la valeur change).En utilisant XmlSerializer .NET avec des propriétés get et fonctions setter
Ce que je fais actuellement est ce genre de chose. L'utilisation prévue est d'utiliser la propriété InT
pour lire la valeur et utiliser SetInT
pour le définir. Le réglage a des effets secondaires, donc une méthode est plus appropriée qu'une propriété ici. XmlSerializationOnly_InT
existe uniquement pour le bénéfice du XmlSerializer
(d'où le nom), et ne doit pas être utilisé par le code normal.
class X
{
public double InT
{
get { return _inT; }
}
public void SetInT(double newInT)
{
if (newInT != _inT)
{
_inT = newInT;
Changed();//includes delegate call; potentially expensive
}
}
private double _inT;
// not called by normal code, as the property set is not just a simple
// field set or two.
[XmlElement(ElementName = "InT")]
public double XmlSerializationOnly_InT
{
get { return InT; }
set { SetInT(value); }
}
}
Cela fonctionne, il est assez facile à faire, et le fichier XML ressemble que vous attendez. C'est du travail manuel cependant, et un peu moche, donc je suis seulement un peu satisfait. Ce que j'aimerais vraiment, c'est pouvoir dire à la sérialisation XML de lire la valeur en utilisant la propriété, et la définir en utilisant la fonction setter. Ensuite, je n'aurais pas besoin de XmlSerializationOnly_InT
du tout. Je semble suivre la pratique habituelle en distinguant les ensembles de propriétés et les fonctions de réglage de cette manière, donc je suis sûr que je ne suis pas la seule personne à avoir rencontré cela (bien que google suggère que je pourrais être). Qu'ont fait les autres dans cette situation? Yat-il un moyen facile de persuader le XmlSerializer
de gérer ce genre de chose mieux? Sinon, y a-t-il peut-être un autre moyen facile de le faire?
Quelle est la raison d'utiliser une méthode setter plutôt qu'un poseur de propriété? Cela fonctionnerait tout de même, serait plus facile à utiliser, et la sérialisation XML fonctionnerait très bien ... –
Question mise à jour avec une petite note à ce sujet. Voir, par exemple, http://msdn.microsoft.com/en-us/library/ms229054.aspx. –