• 序列化测试


    namespace Test
    {
        using System;
        using System.IO;
        using System.Text;
        using System.Xml;
        using System.Xml.Serialization;
        using Test.Share;
        using Microshaoft;
        public class Class1
        {
            static void Main(string[] args)
            {
                WebDirectory x = new WebDirectory();
                x.Name = "Microshaoft";
                WebFile y1 = new WebFile();
                y1.Name = "Microshaoft简体繁體中文";
                y1.IsReadOnly = false;
                y1.Url = "http://www.microshaoft.com";
                WebFile y2 = new WebFile();
                y2.Name = "Microshaoft中文";
                y2.Flag = FlagEnum.Value2;
                WebFile[] a = new WebFile[2];
                a[0] = y1;
                a[1] = y2;
                x.WebFiles = a;
                Console.WriteLine("Binary 序列化:");
                byte[] buffer = SerializerHelper.ObjectToBinary<WebDirectory>(x);
                Console.WriteLine("Binary 反序列化:");
                Console.WriteLine("Binary Serialize bytes Length:{0}", buffer.Length);
                WebDirectory z = SerializerHelper.BinaryToObject<WebDirectory>(buffer);
                Console.WriteLine(z.WebFiles[0].Name);
                Console.WriteLine(z.WebFiles[0].Url);
                Console.WriteLine(z.WebFiles[0].Flag);
                Console.WriteLine(z.WebFiles[1].Flag);
                Encoding e = Encoding.UTF8;
                e = Encoding.GetEncoding("gb2312");
                //e = Encoding.BigEndianUnicode;
                MemoryStream stream = new MemoryStream();
                XmlTextWriter writer = new XmlTextWriter(stream, e);
                XmlSerializer serializer = new XmlSerializer(x.GetType());
                string xml = SerializerHelper.ObjectToXml<WebDirectory>
                                                        (
                                                            x
                                                            , writer
                                                            , serializer
                                                        );
                Console.WriteLine("Xml序列化:");
                Console.WriteLine(xml);
                Console.WriteLine("Xml反序列化:");
                z = SerializerHelper.XmlToObject<WebDirectory>(xml);
                Console.WriteLine(z.WebFiles[0].Name);
                Console.WriteLine(z.WebFiles[0].Url);
                Console.WriteLine(z.WebFiles[0].Flag);
                Console.WriteLine(z.WebFiles[1].Flag);
                stream = new MemoryStream();
                buffer = e.GetPreamble();
                stream.Write(buffer, 0, buffer.Length);
                buffer = e.GetBytes(xml);
                Console.WriteLine("Xml Serialize bytes Length:{0}", buffer.Length);
                stream.Write(buffer, 0, buffer.Length);
                stream.Position = 0;
                XmlReader reader = XmlReader.Create(stream);
                while (reader.Read())
                {
                    if (reader.NodeType == XmlNodeType.EndElement)
                    {
                        continue;
                    }
                    Console.Write("NodeType{0}: NodeName:{1}", reader.NodeType, reader.Name);
                    if (reader.HasValue)
                    {
                        Console.Write(" NodeValue:{0}", reader.Value);
                    }
                    Console.WriteLine();
                    if (reader.HasAttributes)
                    {
                        while (reader.MoveToNextAttribute())
                        {
                            Console.WriteLine("Attribute:{0}={1}", reader.Name, reader.Value);
                        }
                    }
                    //Console.ReadLine();
                }
                Console.WriteLine("Hello World");
                Console.WriteLine(Environment.Version.ToString());
                Console.ReadKey();
            }
        }
    }
    namespace Test.Share
    {
        using System;
        using System.Collections.Generic;
        using System.Xml.Serialization;
        [XmlRoot("WebDirectory")]
        [Serializable]
        public class WebDirectory
        {
            [XmlAttribute("Name")]
            public string Name;
            [XmlArrayItem("WebFile", typeof(WebFile))]
            [XmlArray("WebFiles")]
            public WebFile[] WebFiles;
    
            //public Dictionary<string,string> MyProperty { get; set; }
        }
        public enum FlagEnum : uint
        {
            Value1
            , Value2
        }
        [Serializable]
        public class WebFile
        {
            [XmlAttribute("Name")]
            public string Name;
            [XmlAttribute("CreateTime")]
            public DateTime CreateTime;
            [XmlAttribute("LastWriteTime")]
            [XmlIgnore()]
            public DateTime LastWriteTime;
            [XmlAttribute("Length")]
            public long Length;
            //[XmlAttribute("Url")]
            [XmlElement("Url")]
            public string Url;
            [XmlAttribute("IsReadOnly")]
            public bool IsReadOnly;
            [XmlAttribute("Flag")]
            public FlagEnum Flag;
        }
    }
    namespace Microshaoft
    {
        using System;
        using System.IO;
        using System.Text;
        using System.Xml;
        using System.Xml.Serialization;
        using System.Runtime.Serialization.Formatters.Binary;
        public static class SerializerHelper
        {
            public static T XmlToObject<T>(string Xml)
            {
                StringReader stringReader = new StringReader(Xml);
                XmlReader xmlReader = XmlReader.Create(stringReader);
                XmlSerializer serializer = new XmlSerializer(typeof(T));
                return (T)serializer.Deserialize(xmlReader);
            }
            public static string ObjectToXml<T>
                                        (
                                            T Object
                                            , XmlTextWriter writer
                                            , XmlSerializer serializer
                                        )
            {
                serializer.Serialize(writer, Object);
                MemoryStream stream = writer.BaseStream as MemoryStream;
                byte[] bytes = stream.ToArray();
                Encoding e = EncodingHelper.IdentifyEncoding
                                                (
                                                    bytes
                                                    , Encoding.GetEncoding("gb2312")
                                                ///                                                , new Encoding[]
                                                ///                                                        {
                                                ///                                                            Encoding.UTF8
                                                ///                                                            , Encoding.Unicode
                                                ///                                                        }
                                                );
                byte[] buffer = e.GetPreamble();
                int offset = buffer.Length;
                buffer = new byte[bytes.Length - offset];
                Buffer.BlockCopy(bytes, offset, buffer, 0, buffer.Length);
                string s = e.GetString(buffer);
                return s;
            }
            public static string ObjectToXml<T>(T Object, Encoding e)
            {
                XmlSerializer serializer = new XmlSerializer(typeof(T));
                using (MemoryStream stream = new MemoryStream())
                {
                    XmlTextWriter writer = new XmlTextWriter(stream, e);
                    string s = ObjectToXml<T>
                                        (
                                            Object
                                            , writer
                                            , serializer
                                        );
                    writer.Close();
                    writer = null;
                    return s;
                }
            }
            public static byte[] ObjectToBinary<T>
                                        (
                                            T Object
                                        )
            {
                using (MemoryStream stream = new MemoryStream())
                {
                    BinaryFormatter formater = new BinaryFormatter();
                    formater.Serialize(stream, Object);
                    byte[] buffer = stream.ToArray();
                    return buffer;
                }
            }
            public static T BinaryToObject<T>
                                        (
                                            byte[] data
                                        )
            {
                using (MemoryStream stream = new MemoryStream())
                {
                    BinaryFormatter formater = new BinaryFormatter();
                    stream.Write(data, 0, data.Length);
                    stream.Position = 0;
                    T Object = (T)formater.Deserialize(stream);
                    return Object;
                }
            }
        }
    }
    namespace Microshaoft
    {
        using System.IO;
        using System.Text;
        using System.Collections.Generic;
        public static class EncodingHelper
        {
            public static Encoding IdentifyEncoding
                                        (
                                            Stream stream
                                            , Encoding defaultEncoding
                                            , Encoding[] identifyEncodings
                                        )
            {
                byte[] data = StreamDataHelper.ReadDataToBytes(stream);
                return IdentifyEncoding
                            (
                                data
                                , defaultEncoding
                                , identifyEncodings
                            );
            }
            public static Encoding IdentifyEncoding
                                        (
                                            Stream stream
                                            , Encoding defaultEncoding
                                        )
            {
                byte[] data = StreamDataHelper.ReadDataToBytes(stream);
                return IdentifyEncoding
                            (
                                data
                                , defaultEncoding
                            );
            }
            public static Encoding IdentifyEncoding
                                        (
                                            byte[] data
                                            , Encoding defaultEncoding
                                        )
            {
                EncodingInfo[] encodingInfos = Encoding.GetEncodings();
                List<Encoding> list = new List<Encoding>();
                foreach (EncodingInfo info in encodingInfos)
                {
                    Encoding e = info.GetEncoding();
                    if (e.GetPreamble().Length > 0)
                    {
                        list.Add(e);
                        System.Console.WriteLine(e.EncodingName);
                    }
                }
                Encoding[] encodings = new Encoding[list.Count];
                list.CopyTo(encodings);
                return IdentifyEncoding
                            (
                                data
                                , defaultEncoding
                                , encodings
                            );
            }
            public static Encoding IdentifyEncoding
                                        (
                                            byte[] data
                                            , Encoding defaultEncoding
                                            , Encoding[] identifyEncodings
                                        )
            {
                Encoding encoding = defaultEncoding;
                foreach (Encoding e in identifyEncodings)
                {
                    byte[] buffer = e.GetPreamble();
                    int l = buffer.Length;
                    if (l == 0)
                    {
                        continue;
                    }
                    bool flag = false;
                    for (int i = 0; i < l; i++)
                    {
                        if (buffer[i] != data[i])
                        {
                            flag = true;
                            break;
                        }
                    }
                    if (flag)
                    {
                        continue;
                    }
                    else
                    {
                        encoding = e;
                    }
                }
                return encoding;
            }
        }
    }
    namespace Microshaoft
    {
        using System.IO;
        public static class StreamDataHelper
        {
            public static byte[] ReadDataToBytes(Stream stream)
            {
                byte[] buffer = new byte[64 * 1024];
                MemoryStream ms = new MemoryStream();
                int r = 0;
                int l = 0;
                long position = -1;
                if (stream.CanSeek)
                {
                    position = stream.Position;
                    stream.Position = 0;
                }
                while (true)
                {
                    r = stream.Read(buffer, 0, buffer.Length);
                    if (r > 0)
                    {
                        l += r;
                        ms.Write(buffer, 0, r);
                    }
                    else
                    {
                        break;
                    }
                }
                byte[] bytes = new byte[l];
                ms.Position = 0;
                ms.Read(bytes, 0, (int)l);
                ms.Close();
                ms.Dispose();
                ms = null;
                if (position >= 0)
                {
                    stream.Position = position;
                }
                return bytes;
            }
        }
    }
  • 相关阅读:
    csrf跨站请求伪造
    IO 之 InputStream 和 Reader
    javadoc tags
    java this
    递归
    java 文件中 定义一个字符串,它的默认编码是什么?
    合并数组
    << 移位运算
    final static T
    Base64.java 工具类
  • 原文地址:https://www.cnblogs.com/nocanstillbb/p/10556754.html
Copyright © 2020-2023  润新知