| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Text;
 
- using System.Xml;
 
- using System.Xml.Serialization;
 
- using System.Runtime.Serialization;
 
- using System.Runtime.Serialization.Formatters;
 
- using System.Runtime.Serialization.Formatters.Binary;
 
- using System.IO;
 
- using System.Reflection;
 
- using Aitex.Core.RT.Log;
 
- namespace Aitex.Core.Util
 
- {
 
-     /// <summary>
 
-     /// class 'ObjectSerializer' provides a set of utilities which serialize objects to xml or binary file, 
 
-     /// or deserialize xml or binary file back to objects.
 
-     /// </summary>
 
-     public sealed class ObjectSerializer
 
-     {
 
-         private ObjectSerializer() { }
 
-         /// <summary>
 
-         /// Serialize the supplied object To memory stream in xml format.
 
-         /// </summary>
 
-         /// <param name="valueToSerializeToMemoryStream"></param>
 
-         /// <returns></returns>
 
-         public static MemoryStream SerializeObjectToMemoryStream(object valueToSerializeToMemoryStream)
 
-         {
 
-             var retVal = new MemoryStream();
 
-             var typeToSerialize = valueToSerializeToMemoryStream.GetType();
 
-             var serializer = new XmlSerializer(typeToSerialize);
 
-             serializer.Serialize(retVal, valueToSerializeToMemoryStream);
 
-             retVal.Seek(0, SeekOrigin.Begin);
 
-             return retVal;
 
-         }
 
-         /// <summary>
 
-         /// 
 
-         /// </summary>
 
-         /// <param name="obj"></param>
 
-         /// <returns></returns>
 
-         public static XmlDocument SerializeObjectToXmlDom(object obj)
 
-         {
 
-             Stream stream = SerializeObjectToMemoryStream(obj);
 
-             XmlDocument xmldom = new XmlDocument();
 
-             xmldom.Load(stream);
 
-             return xmldom;
 
-         }
 
-         private static Type[] RemoveDuplicateType(Type typeOfObject, IEnumerable<Type> types)
 
-         {
 
-             var typeList = new List<Type>();
 
-             foreach (var type in types)
 
-             {
 
-                 if (!type.FullName.Equals(typeOfObject.FullName))
 
-                 {
 
-                     typeList.Add(type);
 
-                 }
 
-             }
 
-             return typeList.ToArray();
 
-         }
 
-         /// <summary>
 
-         /// Serialize derived types to xml stream, SeekOrigin set to Begin.
 
-         /// </summary>
 
-         /// <param name="valueToSerializeToMemoryStream"></param>
 
-         /// <param name="types"></param>
 
-         /// <returns></returns>
 
-         public static MemoryStream SerializeObjectToMemoryStream(object valueToSerializeToMemoryStream, Type[] types)
 
-         {
 
-             var retVal = new MemoryStream();
 
-             var typeToSerialize = valueToSerializeToMemoryStream.GetType();
 
-             types = RemoveDuplicateType(typeToSerialize, types);
 
-             var serializer = new XmlSerializer(typeToSerialize, types);
 
-             serializer.Serialize(retVal, valueToSerializeToMemoryStream);
 
-             retVal.Seek(0, SeekOrigin.Begin);
 
-             return retVal;
 
-         }
 
-         /// <summary>
 
-         /// Serialize the supplied object To binary stream, SeekOrigin set to Begin.
 
-         /// </summary>
 
-         /// <param name="valueToSerializeToMemoryStream"></param>
 
-         /// <returns></returns>
 
-         public static MemoryStream SerializeObjectToBinaryStream(object valueToSerializeToMemoryStream)
 
-         {
 
-             // Converts object [objectToSerialize] of type [typeOfObjectBeingSerialized] to a memory stream  
 
-             var retVal = new MemoryStream();
 
-             IFormatter formatter = new BinaryFormatter();
 
-             formatter.Serialize(retVal, valueToSerializeToMemoryStream);
 
-             retVal.Seek(0, SeekOrigin.Begin);
 
-             return retVal;
 
-         }
 
-         /// <summary>
 
-         /// Serializes an object into a file using binary formatter.
 
-         /// </summary>
 
-         /// <param name="fullFileName"></param>
 
-         /// <param name="valueToSerialize"></param>
 
-         /// <returns></returns>
 
-         public static bool SerializeObjectToBinaryFile(string fullFileName, object valueToSerialize)
 
-         {
 
-             try
 
-             {
 
-                 using (FileStream stream = new FileStream(fullFileName, FileMode.OpenOrCreate))
 
-                 {
 
-                     IFormatter formatter = new BinaryFormatter();
 
-                     formatter.Serialize(stream, valueToSerialize);
 
-                     stream.Seek(0, SeekOrigin.Begin);
 
-                 }
 
-             }
 
-             catch (Exception e)
 
-             {
 
-                 LOG.Error(e.Message);
 
-                 return false;
 
-             }
 
-             return true;
 
-         }
 
-         /// <summary>
 
-         /// Serialize the supplied object To Xml stream
 
-         /// </summary>
 
-         /// <param name="valueToSerializeToMemoryStream"></param>
 
-         /// <returns></returns>
 
-         public static string SerializeObjectToXml(object valueToSerializeToMemoryStream)
 
-         {
 
-             using (var memStream = SerializeObjectToMemoryStream(valueToSerializeToMemoryStream))
 
-             using (var reader = new StreamReader(memStream))
 
-             {
 
-                 return reader.ReadToEnd();
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// Serializes an object into a Xml file.
 
-         /// </summary>
 
-         /// <param name="fullFileName"></param>
 
-         /// <param name="valueToSerializeToFile"></param>
 
-         /// <returns></returns>
 
-         public static bool SerializeObjectToXmlFile(string fullFileName, object valueToSerializeToFile)
 
-         {
 
-             try
 
-             {
 
-                 using (FileStream fs = new FileStream(fullFileName, FileMode.Create))//file existed, use "FileMode.CreateNew" will cause exception
 
-                 {
 
-                     using (MemoryStream ms = SerializeObjectToMemoryStream(valueToSerializeToFile))
 
-                     {
 
-                         ms.WriteTo(fs);
 
-                         ms.Close();
 
-                     }
 
-                     fs.Close();
 
-                 }
 
-             }
 
-             catch (Exception e)
 
-             {
 
-                 LOG.Error(e.Message);
 
-                 return false;
 
-             }
 
-             return true;
 
-         }
 
-         /// <summary>
 
-         /// Deserialize supplied stream using XmlSerializer
 
-         /// </summary>
 
-         /// <typeparam name="T"></typeparam>
 
-         /// <param name="stream"></param>
 
-         /// <returns></returns>
 
-         public static T DeserializeObjectFromStream<T>(Stream stream)
 
-         {
 
-             //todo here always throw exception sometimes 
 
-             var serializer = new XmlSerializer(typeof(T));
 
-             var retVal = (T)serializer.Deserialize(stream);
 
-             return retVal;
 
-         }
 
-         /// <summary>
 
-         /// Convert binary file content to object
 
-         /// </summary>
 
-         /// <typeparam name="T"></typeparam>
 
-         /// <param name="binFilePath"></param>
 
-         /// <returns></returns>
 
-         public static T DeserializeObjectFromBinaryFile<T>(string binFilePath)
 
-         {
 
-             T obj = default(T);
 
-             using (FileStream fs = new FileStream(binFilePath, FileMode.OpenOrCreate))
 
-             {
 
-                 obj = (T)DeserializeObjectFromBinaryStream(fs);
 
-             }
 
-             return obj;
 
-         }
 
-         /// <summary>
 
-         /// Deserialize supplied stream using BinaryFormatter
 
-         /// </summary>
 
-         /// <param name="stream"></param>
 
-         /// <returns></returns>
 
-         public static object DeserializeObjectFromBinaryStream(Stream stream)
 
-         {
 
-             IFormatter formatter = new BinaryFormatter();
 
-             var retVal = formatter.Deserialize(stream);
 
-             return retVal;
 
-         }
 
-         /// <summary>
 
-         /// Deserialize supplied stream using XmlSerializer to specified type of object
 
-         /// </summary>
 
-         /// <param name="stream"></param>
 
-         /// <param name="typeOfObject"></param>
 
-         /// <returns></returns>
 
-         public static object DeserializeObjectFromStream(Stream stream, Type typeOfObject)
 
-         {
 
-             try
 
-             {
 
-                 var serializer = new XmlSerializer(typeOfObject);
 
-                 object retVal = serializer.Deserialize(stream);
 
-                 return retVal;
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 LOG.Error(string.Format("界面发序列化数据出错:\n函数名:{0}\n串行数据内容:{1}",
 
-                     System.Reflection.MethodInfo.GetCurrentMethod().Name,
 
-                     stream.ToString()), ex);
 
-                 throw;
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// Deserialize supplied stream using XmlSerializer to specified tyep of object 
 
-         /// </summary>
 
-         /// <param name="stream"></param>
 
-         /// <param name="typeOfObject"></param>
 
-         /// <param name="types"></param>
 
-         /// <returns></returns>
 
-         public static object DeserializeObjectFromStream(Stream stream, Type typeOfObject, Type[] types)
 
-         {
 
-             types = RemoveDuplicateType(typeOfObject, types);
 
-             var serializer = new XmlSerializer(typeOfObject, types);
 
-             object retVal = serializer.Deserialize(stream);
 
-             return retVal;
 
-         }
 
-         /// <summary>
 
-         /// Convert supplied string to xml stream, then deserialize the xml stream to specified type of object
 
-         /// </summary>
 
-         /// <param name="xml"></param>
 
-         /// <param name="typeToDeserialize"></param>
 
-         /// <returns></returns>
 
-         public static object DeserializeObjectFromXml(string xml, Type typeToDeserialize)
 
-         {
 
-             if (string.IsNullOrWhiteSpace(xml))
 
-             {
 
-                 return null;
 
-             }
 
-             using (var memoryStream = new MemoryStream())
 
-             {
 
-                 var xmlDoc = new XmlDocument();
 
-                 xmlDoc.LoadXml(xml);
 
-                 xmlDoc.Save(memoryStream);
 
-                 memoryStream.Seek(0, SeekOrigin.Begin);
 
-                 return DeserializeObjectFromStream(memoryStream, typeToDeserialize);
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// Convert xml file content to object
 
-         /// </summary>
 
-         /// <typeparam name="T"></typeparam>
 
-         /// <param name="xmlFilePath"></param>
 
-         /// <returns></returns>
 
-         public static T DeserializeObjectFromXmlFile<T>(string xmlFilePath)
 
-         {
 
-             T obj = default(T);
 
-             FileInfo fi = new FileInfo(xmlFilePath);
 
-             if (!fi.Exists) return obj;
 
-             using (StreamReader reader = new StreamReader(xmlFilePath))
 
-             {
 
-                 if (string.IsNullOrWhiteSpace(reader.ReadToEnd())) return obj;
 
-             }
 
-             using (FileStream fs = new FileStream(xmlFilePath, FileMode.Open))
 
-             {
 
-                 obj = DeserializeObjectFromStream<T>(fs);
 
-             }
 
-             return obj;
 
-         }
 
-     }
 
- }
 
 
  |