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)

  • 相关阅读:
    结婚很难
    ***归心似箭***
    听首你家健和我家菲都唱过的歌吧
    努力幸福
    080509
    快速切题 poj1573
    POJ 2586 Y2K Accounting Bug 贪心 难度:2
    快速切题 poj2632
    POJ 3579 median 二分搜索,中位数 难度:3
    HDU 4802 && HDU 4803 贪心,高精 && HDU 4804 轮廓线dp && HDU 4805 计算几何 && HDU 4811 (13南京区域赛现场赛 题目重演A,B,C,D,J)
  • 原文地址:https://www.cnblogs.com/sift/p/3597465.html
Copyright © 2011-2022 走看看