Всякий раз, когда я использую WCF, я всегда стараюсь сделать неизменяемые классы, которые в конечном итоге переходят через провод (т. Е. Параметры, заданные в конструкторе, свойства доступны только для чтения). Тем не менее, это мешает сериализации WCF, которая требует, чтобы все свойства были Public get/set (что имеет смысл, поскольку оно должно десериализовать их)WCF DataContract сериализация свойств только для чтения?
Даже в this related post, я вижу, что их решение в итоге все сделало Общественность, которая нарушает мое чувство хорошего программирования. Есть ли способ обойти это? Должен ли я просто согласиться на это решение или что-то вроде неизменности эскимосов и быть довольным этим?
Другая вещь, которую я попытался было что-то вроде этого, где я есть базовый класс для всего и производного класса, который сделал набор бесполезно:
/// <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 { }
}
}
Нет, вам все равно нужно включить набор или он не работает. – Craig
Вы можете установить SerializeReadOnlyTypes в true в DataContractSerializerSettings. –
Aw, ссылки на сообщения блога сейчас мертвы :( –