这是线索:
[DataContract]
对.DataContractSerializer
并没有调用任何构造函数.相反,它用于FormatterServices.GetUninitializedObject
创建将反序列化的对象.这会绕过构造函数调用.
你的初始化者:
private List_hydratedProperties = new List ();
由编译器转换为隐式默认构造函数.
作为解决方法,您可以使用反序列化回调OnDeserializingAttribute
:
[DataContract] public abstract class EntityBase: INotifyPropertyChanged where TSubclass : class { private List _hydratedProperties; protected EntityBase() { Init(); } private void Init() { _hydratedProperties = new List () } [OnDeserializing] private void OnDeserializing(StreamingContext context) { Init(); } // ... rest of code here }