zoukankan      html  css  js  c++  java
  • 对象序列化 与反序列化

    1.序列化为二进制流

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.IO;
    namespace Common.Serialization.Byte {
        public class ByteSerializer {
            /// <summary>
            /// 对象转换为二进制流
            /// </summary>
            /// <param name="obj">要序列化的对象</param>
            /// <returns>对象序列化后的二进制流</returns>
            public static byte[] Serialize(object obj) {
                if (obj == null) {return null;}
                MemoryStream ms = new MemoryStream();
                try {
                    BinaryFormatter formatter = new BinaryFormatter();
                    formatter.Serialize(ms, obj);
                    return ms.ToArray();
                } finally {
                    ms.Close();
                }
            }
            /// <summary>
            /// 二进制流转换为对象
            /// </summary>
            /// <param name="buffer">二进制流缓存</param>
            /// <returns>反序列化后的对象</returns>
            public static object Deserialize(byte[] buffer) {
                if ((buffer == null) || (buffer.Length == 0)) {
                    return null;
                }
                MemoryStream ms = new MemoryStream(buffer);
                try {
                    BinaryFormatter formatter = new BinaryFormatter();
                    return formatter.Deserialize(ms);
                } finally {
                    ms.Close();
                }
            }
        }
    }

    2.序列化为XML

    using System;
    using System.Text;
    using System.IO;
    namespace Common.Serialization.Xml {
        public class XmlSerialization {
            /// <summary>
            /// 对象转换为XML字符串
            /// </summary>
            /// <param name="obj">要序列化的对象</param>
            /// <returns>对象序列化后的XML字符串</returns>
            public static string Serialize(object obj) {
                if (obj == null) {
                    return null;
                }
                MemoryStream ms = new MemoryStream();
                try {
                    System.Xml.Serialization.XmlSerializer formatter = new System.Xml.Serialization.XmlSerializer(obj.GetType());
                    formatter.Serialize(ms, obj);
                    return Encoding.Default.GetString(ms.ToArray());
                } finally {
                    ms.Close();
                }
            }
            /// <summary>
            /// XML字符串转换为对象
            /// </summary>
            /// <param name="xml">XML字符串</param>
            /// <param name="targetType">要反序列化为的对象类型</param>
            /// <returns>反序列化后的对象</returns>
            public static object Deserialize(string xml, Type targetType) {
                if ((xml == null) || (xml.Length == 0)) {
                    return null;
                }
                MemoryStream ms = new MemoryStream(Encoding.Default.GetBytes(xml));
                try {
                    System.Xml.Serialization.XmlSerializer formatter = new System.Xml.Serialization.XmlSerializer(targetType);
                    return formatter.Deserialize(ms);
                } finally {
                    ms.Close();
                }
            }
        }
    }

    3.序列化为JSON

    using System;
    using System.Text;
    using System.IO;
    using System.Runtime.Serialization.Json;
    namespace Common.Serialization.Json {
        public class JsonSerializer {
            /// <summary>
            /// 对象转换为JSON字符串
            /// </summary>
            /// <param name="obj">要序列化的对象</param>
            /// <returns>对象序列化后的JSON字符串</returns>
            public static string Serialize(object obj) {
                if (obj == null) {return null;}
                MemoryStream ms = new MemoryStream();
                try {
                    DataContractJsonSerializer formatter = new DataContractJsonSerializer(obj.GetType());
                    formatter.WriteObject(ms, obj);
                    return Encoding.UTF8.GetString(ms.ToArray());
                } finally {
                    ms.Close();
                }
            }
            /// <summary>
            /// JSON字符串转换为对象
            /// </summary>
            /// <param name="json">JSON字符串</param>
            /// <param name="targetType">要反序列化为的对象类型</param>
            /// <returns>反序列化后的对象</returns>
            public static object Deserialize(string json, Type targetType) {
                if ((json == null) || (json.Length == 0)) {return null;}
                MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json));
                try {
                    DataContractJsonSerializer formatter = new DataContractJsonSerializer(targetType);
                    return formatter.ReadObject(ms);
                } finally {
                    ms.Close();
                }
            }
        }
    }
  • 相关阅读:
    UVa 12174 (滑动窗口) Shuffle
    UVa 1607 (二分) Gates
    CodeForces ZeptoLab Code Rush 2015
    HDU 1525 (博弈) Euclid's Game
    HDU 2147 (博弈) kiki's game
    UVa 11093 Just Finish it up
    UVa 10954 (Huffman 优先队列) Add All
    CodeForces Round #298 Div.2
    UVa 12627 (递归 计数 找规律) Erratic Expansion
    UVa 714 (二分) Copying Books
  • 原文地址:https://www.cnblogs.com/swarb/p/9924370.html
Copyright © 2011-2022 走看看