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


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

    我很平凡
    没有过人的天分
    没有命运的恩宠
    世界不公平。

    但我知道
    有一个倔强的我
    不甘平庸
    渴望自由
    潜能无限

    我相信
    只要执着和努力
    总有一天
    让世界的不公平
    在我面前低头!
  • 相关阅读:
    在其他对象上同步
    如何在一个线程环境中使用一个线程非安全的java类
    原子类
    Volatile
    Spring中的设计模式2
    Spring中的设计模式
    Struts2中的设计模式
    Struts2中的设计模式----ThreadLocal模式
    享元模式(Flyweight)
    Java类加载器的工作原理
  • 原文地址:https://www.cnblogs.com/kafeibuhuizui/p/14803768.html
Copyright © 2020-2023  润新知