Siempre que uso WCF, siempre trato de crear clases inmutables que terminan pasando por el cable (es decir, los parámetros establecidos en el constructor, las propiedades son de solo lectura). Sin embargo, esto interfiere con la serialización de WCF, que exige que todas las propiedades sean Públicas get/set (lo cual tiene sentido, porque tiene que deserializarlas)WCF DataContract serialización de propiedades de solo lectura?
Incluso en this related post, veo que su solución terminó haciendo que todo Público, lo cual viola mi sentido de buena programación. ¿Hay alguna forma de evitar esto? ¿Tengo que conformarme con esta solución o algo así como la inmutabilidad de las paletas y ser feliz con eso?
La otra cosa que probé era algo como este, donde tendría una clase base para todo y una clase derivada que hizo el conjunto inútil:
/// <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 { }
}
}
No, aún necesita incluir el conjunto o falla. – Craig
Puede establecer SerializeReadOnlyTypes en true en DataContractSerializerSettings. –
Aw, los enlaces a las publicaciones del blog están muertos ahora :( –