Bất cứ khi nào tôi sử dụng WCF, tôi luôn cố gắng tạo các lớp không thay đổi sẽ kết thúc dây dẫn (tức là các tham số được đặt trong hàm tạo, các thuộc tính là chỉ đọc). Tuy nhiên, điều này được trong cách serialization WCF, mà đòi hỏi rằng tất cả các tài sản được công nhận/thiết lập (mà có ý nghĩa, bởi vì nó phải deserialize chúng)WCF DataContract serialization thuộc tính chỉ đọc?
Ngay cả trong this related post, tôi thấy rằng giải pháp của họ đã kết thúc Công khai, vi phạm ý thức lập trình tốt của tôi. Có cách nào để khắc phục điều này? Tôi có phải chỉ giải quyết cho giải pháp này hoặc một cái gì đó như bất biến popsicle và được hạnh phúc với nó?
Một điều khác tôi đã cố gắng là một cái gì đó như thế này, nơi tôi muốn có một lớp cơ sở cho tất cả mọi thứ và một lớp có nguồn gốc khiến tập vô ích:
/// <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 { }
}
}
Không, bạn vẫn cần bao gồm bộ hoặc không thành công. – Craig
Bạn có thể đặt SerializeReadOnlyTypes thành true trong DataContractSerializerSettings. –
Ôi, các liên kết bài đăng trên blog đã chết ngay bây giờ: ( –