| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501 | 
							- using Newtonsoft.Json;
 
- using System;
 
- using System.IO;
 
- using System.IO.Compression;
 
- using System.Runtime.Serialization.Formatters.Binary;
 
- using System.Runtime.Serialization.Json;
 
- using System.Text;
 
- using System.Xml;
 
- using System.Xml.Serialization;
 
- namespace Venus_Unity
 
- {
 
-     public class SerializeHelper
 
-     {
 
-         private static SerializeHelper m_Instance;
 
-         public static SerializeHelper Instance
 
-         {
 
-             get
 
-             {
 
-                 if (m_Instance == null)
 
-                 {
 
-                     m_Instance = new SerializeHelper();
 
-                 }
 
-                 return m_Instance;
 
-             }
 
-         }
 
-         public SerializeHelper()
 
-         { }
 
-         #region XML序列化
 
-         /// <summary>
 
-         /// 文件化XML序列化
 
-         /// </summary>
 
-         /// <param name="obj">对象</param>
 
-         /// <param name="filename">文件路径</param>
 
-         public void Save(object obj, string filename)
 
-         {
 
-             FileStream fs = null;
 
-             try
 
-             {
 
-                 fs = new FileStream(filename, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
 
-                 //Create our own namespaces for the output
 
-                 XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
 
-                 //Add an empty namespace and empty value
 
-                 ns.Add("", "");
 
-                 XmlSerializer serializer = new XmlSerializer(obj.GetType());
 
-                 serializer.Serialize(fs, obj, ns);
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 throw ex;
 
-             }
 
-             finally
 
-             {
 
-                 if (fs != null) fs.Close();
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// 文件化XML反序列化
 
-         /// </summary>
 
-         /// <param name="type">对象类型</param>
 
-         /// <param name="filename">文件路径</param>
 
-         public object Load(Type type, string filename)
 
-         {
 
-             FileStream fs = null;
 
-             try
 
-             {
 
-                 fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
 
-                 XmlSerializer serializer = new XmlSerializer(type);
 
-                 return serializer.Deserialize(fs);
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 throw ex;
 
-             }
 
-             finally
 
-             {
 
-                 if (fs != null) fs.Close();
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// 文本化XML序列化
 
-         /// </summary>
 
-         /// <param name="item">对象</param>
 
-         public string ToXml<T>(T item)
 
-         {
 
-             XmlSerializer serializer = new XmlSerializer(item.GetType());
 
-             StringBuilder sb = new StringBuilder();
 
-             using (XmlWriter writer = XmlWriter.Create(sb))
 
-             {
 
-                 serializer.Serialize(writer, item);
 
-                 return sb.ToString();
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// 文本化XML反序列化
 
-         /// </summary>
 
-         /// <param name="str">字符串序列</param>
 
-         public T FromXml<T>(string str)
 
-         {
 
-             XmlSerializer serializer = new XmlSerializer(typeof(T));
 
-             using (XmlReader reader = new XmlTextReader(new StringReader(str)))
 
-             {
 
-                 return (T)serializer.Deserialize(reader);
 
-             }
 
-         }
 
-         #endregion
 
-         #region BinaryFormatter序列化
 
-         /// <summary>
 
-         /// BinaryFormatter序列化
 
-         /// </summary>
 
-         /// <param name="item">对象</param>
 
-         public string ToBinary<T>(T item)
 
-         {
 
-             BinaryFormatter formatter = new BinaryFormatter();
 
-             using (MemoryStream ms = new MemoryStream())
 
-             {
 
-                 formatter.Serialize(ms, item);
 
-                 ms.Position = 0;
 
-                 byte[] bytes = ms.ToArray();
 
-                 StringBuilder sb = new StringBuilder();
 
-                 foreach (byte bt in bytes)
 
-                 {
 
-                     sb.Append(string.Format("{0:X2}", bt));
 
-                 }
 
-                 return sb.ToString();
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// BinaryFormatter反序列化
 
-         /// </summary>
 
-         /// <param name="str">字符串序列</param>
 
-         public T FromBinary<T>(string str)
 
-         {
 
-             int intLen = str.Length / 2;
 
-             byte[] bytes = new byte[intLen];
 
-             for (int i = 0; i < intLen; i++)
 
-             {
 
-                 int ibyte = Convert.ToInt32(str.Substring(i * 2, 2), 16);
 
-                 bytes[i] = (byte)ibyte;
 
-             }
 
-             BinaryFormatter formatter = new BinaryFormatter();
 
-             using (MemoryStream ms = new MemoryStream(bytes))
 
-             {
 
-                 return (T)formatter.Deserialize(ms);
 
-             }
 
-         }
 
-         #endregion
 
-         /// <summary>
 
-         /// 将对象序列化为二进制字节
 
-         /// </summary>
 
-         /// <param name="obj">待序列化的对象</param>
 
-         /// <returns></returns>
 
-         public byte[] SerializeToBinary(object obj)
 
-         {
 
-             byte[] bytes = new byte[2500];
 
-             using (MemoryStream memoryStream = new MemoryStream())
 
-             {
 
-                 BinaryFormatter bformatter = new BinaryFormatter();
 
-                 bformatter.Serialize(memoryStream, obj);
 
-                 memoryStream.Seek(0, 0);
 
-                 if (memoryStream.Length > bytes.Length)
 
-                 {
 
-                     bytes = new byte[memoryStream.Length];
 
-                 }
 
-                 bytes = memoryStream.ToArray();
 
-             }
 
-             return bytes;
 
-         }
 
-         /// <summary>
 
-         /// 从二进制字节中反序列化为对象
 
-         /// </summary>
 
-         /// <param name="type">对象的类型</param>
 
-         /// <param name="bytes">字节数组</param>
 
-         /// <returns>反序列化后得到的对象</returns>
 
-         public object DeserializeFromBinary(Type type, byte[] bytes)
 
-         {
 
-             object result = new object();
 
-             using (MemoryStream memoryStream = new MemoryStream(bytes))
 
-             {
 
-                 BinaryFormatter serializer = new BinaryFormatter();
 
-                 result = serializer.Deserialize(memoryStream);
 
-             }
 
-             return result;
 
-         }
 
-         /// <summary>
 
-         /// 将文件对象序列化到文件中
 
-         /// </summary>
 
-         /// <param name="obj">待序列化的对象</param>
 
-         /// <param name="path">文件路径</param>
 
-         /// <param name="fileMode">文件打开模式</param>
 
-         public void SerializeToBinary(object obj, string path, FileMode fileMode)
 
-         {
 
-             using (FileStream fs = new FileStream(path, fileMode))
 
-             {
 
-                 // Construct a BinaryFormatter and use it to serialize the data to the stream.
 
-                 BinaryFormatter formatter = new BinaryFormatter();
 
-                 formatter.Serialize(fs, obj);
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// 将文件对象序列化到文件中
 
-         /// </summary>
 
-         /// <param name="obj">待序列化的对象</param>
 
-         /// <param name="path">文件路径</param>
 
-         public void SerializeToBinary(object obj, string path)
 
-         {
 
-             SerializeToBinary(obj, path, FileMode.Create);
 
-         }
 
-         /// <summary>
 
-         /// 从二进制文件中反序列化为对象
 
-         /// </summary>
 
-         /// <param name="type">对象的类型</param>
 
-         /// <param name="path">二进制文件路径</param>
 
-         /// <returns>反序列化后得到的对象</returns>
 
-         public object DeserializeFromBinary(Type type, string path)
 
-         {
 
-             object result = new object();
 
-             using (FileStream fileStream = new FileStream(path, FileMode.Open))
 
-             {
 
-                 BinaryFormatter serializer = new BinaryFormatter();
 
-                 result = serializer.Deserialize(fileStream);
 
-             }
 
-             return result;
 
-         }
 
-         /// <summary>
 
-         /// 获取对象的转换为二进制的字节大小
 
-         /// </summary>
 
-         /// <param name="obj"></param>
 
-         /// <returns></returns>
 
-         public long GetByteSize(object obj)
 
-         {
 
-             long result;
 
-             BinaryFormatter bFormatter = new BinaryFormatter();
 
-             using (MemoryStream stream = new MemoryStream())
 
-             {
 
-                 bFormatter.Serialize(stream, obj);
 
-                 result = stream.Length;
 
-             }
 
-             return result;
 
-         }
 
-         /// <summary>
 
-         /// 克隆一个对象
 
-         /// </summary>
 
-         /// <param name="obj">待克隆的对象</param>
 
-         /// <returns>克隆的一个新的对象</returns>
 
-         public object Clone(object obj)
 
-         {
 
-             object cloned = null;
 
-             BinaryFormatter bFormatter = new BinaryFormatter();
 
-             using (MemoryStream memoryStream = new MemoryStream())
 
-             {
 
-                 try
 
-                 {
 
-                     bFormatter.Serialize(memoryStream, obj);
 
-                     memoryStream.Seek(0, SeekOrigin.Begin);
 
-                     cloned = bFormatter.Deserialize(memoryStream);
 
-                 }
 
-                 catch //(Exception e)
 
-                 {
 
-                     ;
 
-                 }
 
-             }
 
-             return cloned;
 
-         }
 
-         /// <summary>
 
-         /// 从文件中读取文本内容
 
-         /// </summary>
 
-         /// <param name="path">文件路径</param>
 
-         /// <returns>文件的内容</returns>
 
-         public string ReadFile(string path)
 
-         {
 
-             string content = string.Empty;
 
-             using (StreamReader reader = new StreamReader(path))
 
-             {
 
-                 content = reader.ReadToEnd();
 
-             }
 
-             return content;
 
-         }
 
-   
 
-         private byte[] compress(byte[] bytes)
 
-         {
 
-             using (MemoryStream ms = new MemoryStream())
 
-             {
 
-                 using (DeflateStream gzs = new DeflateStream(ms, CompressionMode.Compress, false))
 
-                 {
 
-                     gzs.Write(bytes, 0, bytes.Length);
 
-                 }
 
-                 ms.Close();
 
-                 return ms.GetBuffer();
 
-             }
 
-         }
 
-         private byte[] decompress(byte[] bytes)
 
-         {
 
-             using (MemoryStream ms = new MemoryStream(bytes, false))
 
-             {
 
-                 using (DeflateStream gzs = new DeflateStream(ms, CompressionMode.Decompress, false))
 
-                 {
 
-                     using (MemoryStream dest = new MemoryStream())
 
-                     {
 
-                         byte[] tmp = new byte[bytes.Length];
 
-                         int read;
 
-                         while ((read = gzs.Read(tmp, 0, tmp.Length)) != 0)
 
-                         {
 
-                             dest.Write(tmp, 0, read);
 
-                         }
 
-                         dest.Close();
 
-                         return dest.GetBuffer();
 
-                     }
 
-                 }
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// 序列化成一个字符串
 
-         /// </summary>
 
-         /// <typeparam name="T"></typeparam>
 
-         /// <param name="entity"></param>
 
-         /// <returns></returns>
 
-         public string XMLSerializeToString<T>(T entity)
 
-         {
 
-             StringBuilder buffer = new StringBuilder();
 
-             XmlSerializer serializer = new XmlSerializer(typeof(T));
 
-             using (TextWriter writer = new StringWriter(buffer))
 
-             {
 
-                 serializer.Serialize(writer, entity);
 
-             }
 
-             return buffer.ToString();
 
-         }
 
-         /// <summary>
 
-         /// xml字符串反序列化为一个XML文件
 
-         /// </summary>
 
-         /// <typeparam name="T"></typeparam>
 
-         /// <param name="xmlString"></param>
 
-         /// <returns></returns>
 
-         public T DeXMLSerialize<T>(string xmlString)
 
-         {
 
-             T cloneObject = default(T);
 
-             StringBuilder buffer = new StringBuilder();
 
-             buffer.Append(xmlString);
 
-             XmlSerializer serializer = new XmlSerializer(typeof(T));
 
-             using (TextReader reader = new StringReader(buffer.ToString()))
 
-             {
 
-                 Object obj = serializer.Deserialize(reader);
 
-                 cloneObject = (T)obj;
 
-             }
 
-             return cloneObject;
 
-         }
 
-         /// <summary>
 
-         /// Json转换成对象
 
-         /// </summary>
 
-         /// <typeparam name="T"></typeparam>
 
-         /// <param name="jsonText"></param>
 
-         /// <returns></returns>
 
-         public T JsonStringToObject<T>(string jsonText)
 
-         {
 
-             DataContractJsonSerializer s = new DataContractJsonSerializer(typeof(T));
 
-             MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonText));
 
-             T obj = (T)s.ReadObject(ms);
 
-             ms.Dispose();
 
-             return obj;
 
-         }
 
-         /// <summary>
 
-         /// 对象转换成JSON
 
-         /// </summary>
 
-         /// <typeparam name="T"></typeparam>
 
-         /// <param name="obj"></param>
 
-         /// <returns></returns>
 
-         public string ObjectToJsonString<T>(T obj)
 
-         {
 
-             string result = string.Empty;
 
-             try
 
-             {
 
-                 DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
 
-                 using (MemoryStream ms = new MemoryStream())
 
-                 {
 
-                     serializer.WriteObject(ms, obj);
 
-                     ms.Position = 0;
 
-                     using (StreamReader read = new StreamReader(ms))
 
-                     {
 
-                         result = read.ReadToEnd();
 
-                     }
 
-                 }
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 throw new Exception(" 对象转换成JSON失败!" + ex.Message);
 
-             }
 
-             return result;
 
-         }
 
-         /// <summary>
 
-         /// 类对象保存为Json文件
 
-         /// </summary>
 
-         /// <typeparam name="T"></typeparam>
 
-         /// <param name="obj"></param>
 
-         /// <param name="strFilePath"></param>
 
-         /// <returns></returns>
 
-         public bool WriteToJsonFile<T>(T obj, string strFilePath)
 
-         {
 
-             bool bRes = false;
 
-             try
 
-             {
 
-                 string strJson = ObjectToJsonString(obj);
 
-                 //File.WriteAllText(strFilePath, strJson, Encoding.UTF8);
 
-                 WriteToJsonFile(strJson, strFilePath);
 
-                 bRes = true;
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 throw new Exception("Write Json File Fail!" + ex.Message);
 
-             }
 
-             return bRes;
 
-         }
 
-         /// <summary>
 
-         /// Json文件转换为类对象
 
-         /// </summary>
 
-         /// <typeparam name="T"></typeparam>
 
-         /// <param name="strFilePath"></param>
 
-         /// <returns></returns>
 
-         public T ReadFromJsonFile<T>(string strFilePath)
 
-         {
 
-             if (File.Exists(strFilePath))
 
-             {
 
-                 try
 
-                 {
 
-                     string strJson = File.ReadAllText(strFilePath);
 
-                     return JsonStringToObject<T>(strJson);
 
-                 }
 
-                 catch (Exception ex)
 
-                 {
 
-                     throw new Exception("Read Json File Fail!" + ex.Message);
 
-                 }
 
-             }
 
-             else
 
-             {
 
-                 throw new Exception("File is not Exit!");
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// 对象转换成JSON,并保存文件
 
-         /// </summary>
 
-         /// <param name="obj"></param>
 
-         /// <param name="path"></param>
 
-         public void WriteToJsonFile(string content, string path)
 
-         {
 
-             if (!File.Exists(path))  // 判断是否已有相同文件 
 
-             {
 
-                 FileStream fs1 = new FileStream(path, FileMode.Create, FileAccess.ReadWrite);
 
-                 fs1.Flush();
 
-                 fs1.Dispose();
 
-                 fs1.Close();
 
-             }
 
-             File.WriteAllText(path, ConvertJsonString(content));
 
-         }
 
-         /// <summary>
 
-         /// 格式化json字符串
 
-         /// </summary>
 
-         /// <param name="str"></param>
 
-         /// <returns></returns>
 
-         private string ConvertJsonString(string str)
 
-         {
 
-             JsonSerializer serializer = new JsonSerializer();
 
-             TextReader tr = new StringReader(str);
 
-             JsonTextReader jtr = new JsonTextReader(tr);
 
-             object obj = serializer.Deserialize(jtr);
 
-             if (obj != null)
 
-             {
 
-                 StringWriter textWriter = new StringWriter();
 
-                 JsonTextWriter jsonWriter = new JsonTextWriter(textWriter)
 
-                 {
 
-                     Formatting = Newtonsoft.Json.Formatting.Indented,
 
-                     Indentation = 4,
 
-                     IndentChar = ' '
 
-                 };
 
-                 serializer.Serialize(jsonWriter, obj);
 
-                 return textWriter.ToString();
 
-             }
 
-             else
 
-             {
 
-                 return str;
 
-             }
 
-         }
 
-         public static T DeepCopyJson<T>(T obj)
 
-         {
 
-             return JsonConvert.DeserializeObject<T>(JsonConvert.SerializeObject(obj));
 
-         }
 
-     }
 
- }
 
 
  |