zoukankan      html  css  js  c++  java
  • ISerializable接口

    继承ISerializable接口可以灵活控制序列化过程

    格式化器的工作流程:格式化器再序列化一个对象的时候,发现对象继承了ISerializable接口,那它就会忽略掉类型所有的序列化特性,转而调用类型的GetObjectData方法来构造一个SerializationInfo对象。

    我们在方法GetObjectData中处理序列化,然后在一个带参数的构造方法中处理反序列化。虽然在接口中没有地方指出需要这样一个构造器,但这确实是需要的,除非我们序列化后不再打算把它反序列化回来。

    1 public interface ISerializable
    2     {
    3         [SecurityCritical]
    4         void GetObjectData(SerializationInfo info, StreamingContext context);
    5     }
    [Serializable]
        public class UserInfo : ISerializable
        {
            //public string FirstName { get; set; }
            //public string LastName { get; set; }
            public string Name { get; set; }
            public UserInfo() { }
            public UserInfo(SerializationInfo info, StreamingContext context) {
                Name = info.GetString("Name");
                //FirstName = info.GetString("FirstName");
                //LastName = info.GetString("LastName");
            }
            void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
            {
                info.AddValue("Name", this.Name);
                if (!string.IsNullOrWhiteSpace(this.Name))
                {
                    info.AddValue("FirstName", this.Name.Split(' ')[0]);
                    info.AddValue("LastName", this.Name.Split(' ')[1]);
                }
    
            }
        }
    
        public class UserInfoDTO
        {
            public string FirstName { get; set; }
            public string LastName { get; set; }
            public string Name { get; set; }
        }
            static void Main(string[] args)
            {
                UserInfo userInfo = new UserInfo { Name= "尼古拉斯 赵四" };
    
                string seriaData = JsonConvert.SerializeObject(userInfo);//{"Name":"尼古拉斯 赵四","FirstName":"尼古拉斯","LastName":"赵四"}
                UserInfoDTO userInfoDTO = JsonConvert.DeserializeObject<UserInfoDTO>(seriaData);
                Console.ReadKey();
            }

    参考:https://www.cnblogs.com/farmer-y/p/7991961.html

  • 相关阅读:
    C#库
    大话设计模式--简单工厂模式
    weka平台下手动造.arff的数据
    NIM博弈的必胜取法
    求一个全排列函数: 如p([1,2,3])输出:[123],[132],[213],[231],[312],[321]. 求一个组合函数 如p([1,2,3])输出:[1],[2],[3],[1,2],[2,3],[1,3],[1,2,3]
    哥德巴赫猜想
    C#格式化输出
    meta文件里指定资源
    chromatic aberration
    uber shader
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/12038928.html
Copyright © 2011-2022 走看看