zoukankan      html  css  js  c++  java
  • .NET面试基础知识之序列化(Serialize)(四)

    Serialization Surrogate

    一个对象去系列化另一个对象

    Code:

      public sealed class UniversalToLocalTimeSerializationSurrogate:ISerializationSurrogate
        {
            public UniversalToLocalTimeSerializationSurrogate()
            {
            }

            public void GetObjectData(object obj,SerializationInfo info,StreamingContext context)
            {
                info.AddValue("Date",((DateTime)obj).ToUniversalTime().ToString("u"));
            }

            public object SetObjectData(object obj, SerializationInfo info, StreamingContext context,ISurrogateSelector selector)
            {
                return DateTime.ParseExact(info.GetString("Date"),"u",null).ToLocalTime();
            }
        }

    实现ISerializationSurrogate接口

    使用

        public static void TestSurrogate()
            {
                using (var st = new MemoryStream()) {
                    IFormatter formatter = new SoapFormatter();
                    SurrogateSelector ss = new SurrogateSelector();
                    ss.AddSurrogate(typeof(DateTime),formatter.Context,
                        new UniversalToLocalTimeSerializationSurrogate());
                    formatter.SurrogateSelector = ss;
                    DateTime localTimeBeforeSerialize = DateTime.Now;
                    formatter.Serialize(st, localTimeBeforeSerialize);

                    st.Position = 0;
                    Console.WriteLine(new StreamReader(st));

                    st.Position = 0;
                    DateTime localTimeAfterSerialize = (DateTime)formatter.Deserialize(st);

                    Console.WriteLine("LocalTimeBeforeSerialize={0}",localTimeBeforeSerialize);
                    Console.WriteLine("LocalTimeAfterSerialize={0}",localTimeAfterSerialize);
                }
            }

    Surrogate selector可以是一个集合

    实现接口ISurrogateSelector,有三个方法

    void ChainSelector(ISurrogateSelector selector)

    ISurrogateSelector GetNextSelector()

    ISerializationSurrogate GetSurrogate(Type type, StreamContext context, out ISurrogateSelector selector)

  • 相关阅读:
    存储过程练习 超市管理系统
    SQL 视图
    SQL 存储过程
    SQL 变量、 运算符、 if 、while
    连接查询
    关于表的主外键关系练习 师生 分数表
    java 代码
    转--select/poll/epoll到底是什么一回事
    python学习路线--从入门到入土
    转---变量LEGB规则
  • 原文地址:https://www.cnblogs.com/sift/p/3597465.html
Copyright © 2011-2022 走看看