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)

  • 相关阅读:
    java:LeakFilling (Linux)
    java:redis(redis安装配置,redis的伪集群配置)
    java:Linux(简单命令,远程ssh使用hostname访问,.免密钥登录配置)
    java:easyui(重点示例)
    任意文件下载漏洞学习
    Centos7 nginx报错403 forbidden
    Centos7 nginx提示错误 Access denied.
    Python问题:UnboundLocalError: local variable 'xxx' referenced before assignment
    PHP载入GIF图像造成服务器宕机(CVE-2018-5711)的漏洞复现
    Python问题:'Nonetype' object is not iterable
  • 原文地址:https://www.cnblogs.com/sift/p/3597465.html
Copyright © 2011-2022 走看看