C#序列化反序列化帮助类

简介: //转载:http://hi.baidu.com/fxh19860822/blog/item/df35230b3ded441495ca6bd5.html在C#中常见的序列化的方法主要也有三个:BinaryFormatter、SoapFormatter、XML序列化 /// /// 提供序列化和反序列化对象的相关静态方法。

 

//转载: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



 

目录
相关文章
|
2月前
|
存储 XML JSON
数据传输的艺术:深入探讨序列化与反序列化
数据传输的艺术:深入探讨序列化与反序列化
62 0
|
1月前
|
JSON 安全 Java
Spring Boot 序列化、反序列化
本文介绍了Spring Boot中的序列化和反序列化。Java提供默认序列化机制,通过实现Serializable接口实现对象到字节流的转换。Spring Boot默认使用Jackson处理JSON,可通过注解和配置自定义规则。然而,序列化可能引发安全问题,建议使用白名单、数据校验和安全库。最佳实践包括使用标准机制、自定义规则及注意版本控制。文章还提醒关注性能并提供了相关参考资料。
50 2
|
5天前
|
C#
c# 所有类的最终基类:Object
c# 所有类的最终基类:Object
5 0
|
5天前
|
XML 存储 JSON
c#XML、JSON的序列化和反序列化,看完你就懂了
c#XML、JSON的序列化和反序列化,看完你就懂了
9 0
|
5天前
|
安全 C#
C#Webrequest类的使用
C#Webrequest类的使用
8 0
|
6天前
|
JSON Java Linux
【探索Linux】P.30(序列化和反序列化 | JSON序列化库 [ C++ ] )
【探索Linux】P.30(序列化和反序列化 | JSON序列化库 [ C++ ] )
20 2
|
8天前
|
XML 存储 JSON
[计算机网络]---序列化和反序列化
[计算机网络]---序列化和反序列化
|
8天前
|
SQL 存储 C#
C# Web控件与数据感应之 TreeView 类
C# Web控件与数据感应之 TreeView 类
|
8天前
|
SQL 存储 Oracle
C# Web控件与数据感应之 CheckBoxList 类
C# Web控件与数据感应之 CheckBoxList 类
|
8天前
|
SQL 存储 Oracle
C# Web控件与数据感应之 Control 类
C# Web控件与数据感应之 Control 类

热门文章

最新文章