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

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

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

    我相信
    只要执着和努力
    总有一天
    让世界的不公平
    在我面前低头!
  • 相关阅读:
    PHP 开发 APP 接口 学习笔记与总结
    Java实现 LeetCode 43 字符串相乘
    Java实现 LeetCode 43 字符串相乘
    Java实现 LeetCode 43 字符串相乘
    Java实现 LeetCode 42 接雨水
    Java实现 LeetCode 42 接雨水
    Java实现 LeetCode 42 接雨水
    Java实现 LeetCode 41 缺失的第一个正数
    Java实现 LeetCode 41 缺失的第一个正数
    Java实现 LeetCode 41 缺失的第一个正数
  • 原文地址:https://www.cnblogs.com/kafeibuhuizui/p/14803768.html
Copyright © 2011-2022 走看看