zoukankan      html  css  js  c++  java
  • 序列化无数据怎么办?你需要继承序列化接口,自己实现序列化

    最近在使用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 Web.xml 加载顺序
    eclipse修改SVN下载的项目“>”变成“*”
    MyBatis学习总结(一)——MyBatis快速入门
    Java集合和PHP的对比
    Java对数组对象进行排序
    php 的一个pg_fetch_assoc的怪问题
    Android 更好的Activity生命周期回调
    安卓通知栏的用法
    用广播监听安卓设备电量状态
    attempting to bokeyaunrun eclipse useing the jre instead of jdk,to run eclipse using
  • 原文地址:https://www.cnblogs.com/kafeibuhuizui/p/14803768.html
Copyright © 2011-2022 走看看