⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 deepserializer.cs

📁 个人信息的源代码
💻 CS
字号:
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Soap;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;

namespace DataAccessLayer
{
	/// <summary>
	/// 对一个类对象进行深串并行化。
	/// </summary>
	public class DeepSerializer
	{
		/// <summary>
		/// 将一个对象串行化到指定的文件中(SOAP格式)
		/// </summary>
		/// <param name="obj"></param>
		/// <param name="fileName"></param>
		public static void SoapSerialize(object obj, string fileName)
		{
			if(fileName.Trim() == string.Empty)
			{
				throw new Exception("请指定要串行化的文件名,在DeepSerializer.SoapSerialize中");
			}
			SoapFormatter formatter = new SoapFormatter();
			FileStream stream = null;
			try
			{
				stream = File.Create(fileName);
				formatter.Serialize(stream, obj);
			}
			catch(Exception ex)
			{
				throw new Exception("在串行化为SOAP时出错,在DeepSerializer.SoapSerialize中,下层对象返回的信息:" + ex.Message);
			}
			finally
			{
				stream.Close();
			}
		}
		/// <summary>
		/// 指定一个SOAP文件名,从其内容中重建对象
		/// </summary>
		/// <param name="fileName"></param>
		/// <returns></returns>
		public static object SoapDeserialize(string fileName)
		{
			if(fileName.Trim() == string.Empty)
			{
				throw new Exception("请指定要串行化的文件名,在DeepSerializer.SoapDeserialize中");
			}
			FileStream stream = null;
			SoapFormatter formatter = new SoapFormatter();
			object obj;
			try
			{
				stream = File.OpenRead(fileName);
				obj = formatter.Deserialize(stream);
			}
			catch(Exception ex)
			{
				throw new Exception("在打开文件" + fileName + "进行对象重建时发生错误,在DeepSerializer.SoapSerialize中,下层对象返回的信息:" + ex.Message);
			}
			finally
			{
				stream.Close();
			}
			return obj;
		}
		/// <summary>
		/// 将一个对象串行化到指定的文件中(Binary格式)
		/// </summary>
		/// <param name="obj"></param>
		/// <param name="fileName"></param>
		public static void BinarySerialize(object obj, string fileName)
		{
			if(fileName.Trim() == string.Empty)
			{
				throw new Exception("请指定要串行化的文件名,在DeepSerializer.BinarySerialize中");
			}
			if(obj == null)
				return;
			FileStream stream = null;
			BinaryFormatter formatter = new BinaryFormatter();
			try
			{
				stream = File.Create(fileName);
				formatter.Serialize(stream, obj);
			}
			catch(Exception ex)
			{
				throw new Exception("在打开文件并将对象按二进制格式写入文件时出错,在DeepSerializer.BinarySerialize中,下层对象返回的信息:" + ex.Message);
			}
			finally
			{
				stream.Close();
			}
		}
		/// <summary>
		/// 指定一个二进制文件名,从其内容中重建对象
		/// </summary>
		/// <param name="fileName"></param>
		/// <returns></returns>
		public static object BinaryDeserialize(string fileName)
		{
			if(fileName.Trim() == string.Empty)
			{
				throw new Exception("请指定要串行化的文件名,在DeepSerializer.BinaryDeserialize中");
			}
			FileStream stream = null;
			BinaryFormatter formatter = new BinaryFormatter();
			object obj;
			try
			{
				stream = File.OpenRead(fileName);
				obj = formatter.Deserialize(stream);
			}
			catch(Exception ex)
			{
				throw new Exception("在打开文件" + fileName + "时出错,在DeepSerializer.BinaryDeserialize中,下层对象返回的信息:" + ex.Message);
			}
			finally
			{
				stream.Close();
			}
			return obj;
		}
		/// <summary>
		/// 将一个对象串行化到内存流中,注意,流马上就可以使用了(已经是Open的)
		/// </summary>
		/// <param name="obj"></param>
		/// <returns></returns>
		public static MemoryStream BinarySerializeToMemory(object obj)
		{
			if(obj == null)
			{
				return null;
			}
			MemoryStream mstream;
			BinaryFormatter formatter;
			try
			{
				mstream = new MemoryStream();
				formatter = new BinaryFormatter();
				formatter.Context = new System.Runtime.Serialization.StreamingContext(StreamingContextStates.Clone);
				formatter.Serialize(mstream, obj);
			}
			catch(Exception ex)
			{
				throw new Exception("在将一个对象串行化到内存流中时出错,在DeepSerializer.BinarySerializeToMemory中,下层对象返回的信息:" + ex.Message);
			}
			return mstream;
		}
		/// <summary>
		/// 从内存流中重建对象
		/// </summary>
		/// <param name="mstream"></param>
		/// <returns></returns>
		public static object BinaryDeserializeFromMemory(MemoryStream mstream)
		{
			if(mstream == null)
				return null;

			BinaryFormatter formatter;
			object obj;
			try
			{
				formatter = new BinaryFormatter();
				formatter.Context = new StreamingContext(StreamingContextStates.Clone);
				mstream.Position = 0;
				obj = formatter.Deserialize(mstream);
			}
			catch(Exception ex)
			{
				throw new Exception("在从内存流中重建对象时出错,在DeepSerializer.BinaryDeserializeFromMemory中,下层对象返回的信息:" + ex.Message);
			}
			return obj;
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -