序列化无数据怎么办?你需要继承序列化接口,自己实现序列化

最近在使用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

 

posted @ 2021-05-24 11:52  咖啡不会醉  阅读(282)  评论(0编辑  收藏  举报