其他分享
首页 > 其他分享> > 序列化无数据怎么办?你需要继承序列化接口,自己实现序列化

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

作者:互联网

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

 

标签:info,Status,怎么办,Value,接口,DeltaName,AddValue,序列化
来源: https://www.cnblogs.com/kafeibuhuizui/p/14803768.html