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

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

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

    我相信
    只要执着和努力
    总有一天
    让世界的不公平
    在我面前低头!
  • 相关阅读:
    sprin AOP
    springDI注解
    Spring学习
    cookie、session、token三者之间的关系
    解决报错:Cannot find module 'webpack-cli/bin/config-yargs'
    Vue全家桶-前端工程化
    Vue全家桶-前端路由
    Vue
    Git
    Ajax
  • 原文地址:https://www.cnblogs.com/kafeibuhuizui/p/14803768.html
Copyright © 2011-2022 走看看