Ogni volta che uso WCF, cerco sempre di creare classi immutabili che finiscono sul filo (i parametri impostati nel costruttore, le proprietà sono di sola lettura). Tuttavia, questo ostacola la serializzazione WCF, che richiede che tutte le proprietà siano pubbliche get/set (che ha senso, perché deve deserializzarle)serializzazione WCC DataContract di proprietà di sola lettura?
Anche in this related post, vedo che la loro soluzione ha finito per rendere tutto Pubblico, che viola il mio senso di buona programmazione. C'è un modo per aggirare questo? Devo solo accontentarmi di questa soluzione o qualcosa come immutabilità di ghiaccioli e essere felice con esso?
L'altra cosa che ho provato è stato qualcosa di simile, in cui mi piacerebbe avere una classe base per tutto e una classe derivata che ha reso la serie 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 { }
}
}
No, è ancora necessario includere il set o fallisce. – Craig
È possibile impostare SerializeReadOnlyTypes su true in DataContractSerializerSettings. –
Aw, i link del post del blog sono morti ora :( –