📄 deepserializer.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 + -