Chaque fois que j'utilise WCF, j'essaie toujours de rendre les classes immuables qui finissent par passer par le réseau (c'est-à-dire les paramètres définis dans le constructeur, les propriétés sont en lecture seule). Cependant, cela entrave la sérialisation WCF, qui exige que toutes les propriétés soient publiques get/set (ce qui est logique, car il faut les désérialiser)WCF DataContract sérialisation des propriétés en lecture seule?
Même dans this related post, je vois que leur solution a fini par tout faire Public, ce qui viole mon sens de la bonne programmation. Y at-il un moyen de contourner cela? Est-ce que je dois me contenter de cette solution ou de quelque chose comme l'immuabilité de la popsicle et être heureux avec elle?
L'autre chose que j'ai essayé était quelque chose comme ça, où j'aurais une classe de base pour tout et une classe dérivée qui a fait le jeu inutile:
/// <summary>
/// This represents a discovered virtual-machine template that can be
/// instantiated into a RunningVirtualMachine
/// </summary>
[DataContract]
[XmlRoot("VMTemplate")]
public class VirtualMachineTemplateBase
{
[DataMember]
public virtual ulong SizeInBytes { get; set; }
}
/// <summary>
/// This class is the real guts of VirtualMachineTemplate that we're hiding
/// from the base class.
/// </summary>
[XmlInclude(typeof(VirtualMachineTemplateBase))]
public class VirtualMachineTemplate : VirtualMachineTemplateBase, IXmlPicklable, IEnableLogger
{
ulong _SizeInBytes;
public override ulong SizeInBytes {
get { return _SizeInBytes; }
set { }
}
}
Non, vous devez toujours inclure l'ensemble ou il échoue. – Craig
Vous pouvez définir SerializeReadOnlyTypes sur true dans DataContractSerializerSettings. –
Aw, les liens blog sont morts maintenant :( –