最近在使用devexpress的mvvm框架,当用到对继承了INotifyPropertyChanged的基类BindableBase的派生类序列化时,总是无数据,只有{},到底出了什么问题?于是反编译后看到:
[System.Runtime.Serialization.DataContract] public abstract class BindableBase : INotifyPropertyChanged {
自己也写了一个测试案列,果然加上这行特性,就序列化无数据了,大意是:要使其类型可序列化,类型作者必须定义序列化方式。
怎么办呢?那就手动继承序列化接口了。
如果你是要实现序列化,就继承ISerializable,实现GetObjectData即可:
public void GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("DeltaName", DeltaName); info.AddValue("Days", Days); info.AddValue("Status", Status); info.AddValue("Value", Value); }
如果需要反序列化,就需要实现一个私有的类构造函数:
privateData(SerializationInfo info, StreamingContext context) { DeltaName = info.GetString("DeltaName"); Days = info.GetInt32("Days"); Status = info.GetString("Status"); Value= info.GetDouble("Value"); }
当然了,不需要序列化的属性,就不要在这里加进去了。
急!还要在类上添加特性[Serializable]:
[Serializable] public class Data : NewBase, ISerializable