C#序列化反序列化幫助類


 

//轉載:http://hi.baidu.com/fxh19860822/blog/item/df35230b3ded441495ca6bd5.html
在C#中常見的序列化的方法主要也有三個:BinaryFormatter、SoapFormatter、XML序列化

///
<summary>
/// 提供序列化和反序列化對象的相關靜態方法。
/// </summary>
public class SerializerHelper
{
/// <summary>
/// 將指定的對象序列化為XML文件或二進制文件並返回執行狀態。
/// </summary>
/// <param name="o">要序列化的對象</param>
/// <param name="path">保存路徑</param>
/// <param name="isBinaryFile">序列化后生成的文件類型是否為二進制文件,true為二進制文件,否則為xml文件或文本文件</param>
/// <returns>返回執行狀態</returns>
public static bool Serialize(Object o, string path, bool isBinaryFile)
{
bool flag = false;
try
{
if (isBinaryFile)
{
BinaryFormatter formatter = new BinaryFormatter();
using (FileStream stream = new FileStream(path, FileMode.Create))
{
formatter.Serialize(stream, o);
flag = true;
}
}
else
{
XmlSerializer serializer = new XmlSerializer(o.GetType());
using (XmlTextWriter writer = new XmlTextWriter(path, Encoding.UTF8))
{
writer.Formatting = Formatting.Indented;
XmlSerializerNamespaces n = new XmlSerializerNamespaces();
n.Add("", "");
serializer.Serialize(writer, o, n);
flag = true;
}
}
}
catch { flag = false; }
return flag;
}

/// <summary>
/// 將指定的對象序列化為XML格式的字符串並返回。
/// </summary>
/// <param name="o">待序列化的對象</param>
/// <returns>返回序列化后的字符串</returns>
public static string Serialize(Object o)
{
string xml = "";
try
{
XmlSerializer serializer = new XmlSerializer(o.GetType());
using (MemoryStream mem = new MemoryStream())
{
using (XmlTextWriter writer = new XmlTextWriter(mem, Encoding.UTF8))
{
writer.Formatting = Formatting.Indented;
XmlSerializerNamespaces n = new XmlSerializerNamespaces();
n.Add("", "");
serializer.Serialize(writer, o, n);

mem.Seek(0, SeekOrigin.Begin);
using (StreamReader reader = new StreamReader(mem))
{
xml = reader.ReadToEnd();
}
}
}
}
catch { xml = ""; }
return xml;
}

/// <summary>
/// 從指定的文件中反序列化出對應的對象並返回。
/// </summary>
/// <param name="t">要反序列化的對象類型</param>
/// <param name="path">文件路徑</param>
/// <param name="isBinaryFile">反序列化的文件類型是否為二進制文件,true為二進制文件,否則為xml文件或文本文件</param>
/// <returns>返回Object</returns>
public static object Deserialize(Type t, string path, bool isBinaryFile)
{
Object o = null;
try
{
if (!isBinaryFile)
{
XmlSerializer serializer = new XmlSerializer(t);
using (XmlTextReader reader = new XmlTextReader(path))
{
o = serializer.Deserialize(reader);
}
}
else
{
BinaryFormatter formatter = new BinaryFormatter();
using (FileStream stream = new FileStream(path, FileMode.Open, FileAccess.Read))
{
o = formatter.Deserialize(stream);
}
}
}
catch { o = null; }
return o;
}

/// <summary>
/// 將指定的xml格式的字符反序列化為對應的對象並返回。
/// </summary>
/// <param name="t">對象的類型</param>
/// <param name="xml">待反序列化的xml格式的字符的內容</param>
/// <returns>返回對應的對象</returns>
public static Object Deserialize(Type t, string xml)
{
Object o = null;
try
{
XmlSerializer serializer = new XmlSerializer(t);
using (MemoryStream mem = new MemoryStream(Encoding.UTF8.GetBytes(xml)))
{
o = serializer.Deserialize(mem);
}
}
catch { o = null; }
return o;
}

/// <summary>
/// 將指定的對象序列化為XML文件,並返回執行狀態。
/// </summary>
/// <param name="o">要序列化的對象</param>
/// <param name="path">生成的文件名稱</param>
/// <returns>返回執行狀態</returns>
public static bool XmlSerialize(Object o, string path)
{
return SerializerHelper.Serialize(o, path, false);
}

/// <summary>
/// 將指定XML文件,反序列化為對應的對象並返回。
/// </summary>
/// <param name="t">對象的類型</param>
/// <param name="path">XML文件路徑</param>
/// <returns>返回對象</returns>
public static Object XmlDeserialize(Type t, string path)
{
return SerializerHelper.Deserialize(t, path, false);
}

/// <summary>
/// 將指定的對象序列化為二進制文件,並返回執行狀態。
/// </summary>
/// <param name="o">要序列化的對象</param>
/// <param name="path">生成的文件名稱</param>
/// <returns>返回執行狀態</returns>
public static bool BinarySerialize(Object o, string path)
{
return SerializerHelper.Serialize(o, path, true);
}

/// <summary>
/// 將指定二進制文件,反序列化為對應的對象並返回。
/// </summary>
/// <param name="t">對象的類型</param>
/// <param name="path">XML文件路徑</param>
/// <returns>返回對象</returns>
public static Object BinaryDeserialize(Type t, string path)
{
return SerializerHelper.Deserialize(t, path, true);
}
}
http://hi.baidu.com/fxh19860822/blog/item/381f1cd20daf3a3f970a16db.html



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM