| 事件 | 觸發時機 | 屬性 |
|---|---|---|
| Serializing | 序列化前 | [OnSerializing] |
| Serialized | 序列化後 | [OnSerialized] |
| Deserializing | 反序列化前 | [OnDeserializing] |
| Deserialized | 反序列化後 | [OnDeserialized] |
方法簽名固定:void MethodName(StreamingContext context)。每個事件只能標註一個方法。
反序列化不呼叫建構函式,可用 OnDeserialized 初始化未標記 [DataMember] 的欄位。
[DataContract(Name="Employee", Namespace="HenllyeeData")]
public class EmployeeEntry {
private string _companyName; // 非 DataMember
[DataMember(Order=0)] public string Name { get; set; }
[DataMember(Order=1)] public int Age { get; set; }
[DataMember(Order=2)] public decimal Salary { get; set; }
[DataMember(Order=3)]
public string Info {
get => $"Name:{Name}\nAge:{Age}\nSalary:{Salary}\nCompany:{_companyName}";
set { }
}
[OnDeserialized]
void OnDeserialized(StreamingContext context) {
_companyName = "ECI"; // 反序列化後補齊
}
}
Client 呼叫服務取得物件時,Info 屬性即能正確顯示 CompanyName。