序列化无数据怎么办?你需要继承序列化接口,自己实现序列化
最近在使用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
我很平凡
没有过人的天分
没有命运的恩宠
世界不公平。
但我知道
有一个倔强的我
不甘平庸
渴望自由
潜能无限
我相信
只要执着和努力
总有一天
让世界的不公平
在我面前低头!