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



 

目录
相关文章
|
1月前
|
开发框架 .NET C#
C#|.net core 基础 - 删除字符串最后一个字符的七大类N种实现方式
【10月更文挑战第9天】在 C#/.NET Core 中,有多种方法可以删除字符串的最后一个字符,包括使用 `Substring` 方法、`Remove` 方法、`ToCharArray` 与 `Array.Copy`、`StringBuilder`、正则表达式、循环遍历字符数组以及使用 LINQ 的 `SkipLast` 方法。
|
17天前
|
JSON 数据格式 索引
Python中序列化/反序列化JSON格式的数据
【11月更文挑战第4天】本文介绍了 Python 中使用 `json` 模块进行序列化和反序列化的操作。序列化是指将 Python 对象(如字典、列表)转换为 JSON 字符串,主要使用 `json.dumps` 方法。示例包括基本的字典和列表序列化,以及自定义类的序列化。反序列化则是将 JSON 字符串转换回 Python 对象,使用 `json.loads` 方法。文中还提供了具体的代码示例,展示了如何处理不同类型的 Python 对象。
|
27天前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
2月前
|
存储 Java
序列化流 ObjectInputStream 和 ObjectOutputStream 的基本使用【 File类+IO流知识回顾④】
这篇文章介绍了Java中ObjectInputStream和ObjectOutputStream类的基本使用,这两个类用于实现对象的序列化和反序列化。文章解释了序列化的概念、如何通过实现Serializable接口来实现序列化,以及如何使用transient关键字标记不需要序列化的属性。接着,通过示例代码演示了如何使用ObjectOutputStream进行对象的序列化和ObjectInputStream进行反序列化。
序列化流 ObjectInputStream 和 ObjectOutputStream 的基本使用【 File类+IO流知识回顾④】
|
1月前
|
存储 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第9天】在Java的世界里,对象序列化是连接数据持久化与网络通信的桥梁。本文将深入探讨Java对象序列化的机制、实践方法及反序列化过程,通过代码示例揭示其背后的原理。从基础概念到高级应用,我们将一步步揭开序列化技术的神秘面纱,让读者能够掌握这一强大工具,以应对数据存储和传输的挑战。
|
1月前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第3天】在Java编程的世界里,对象序列化与反序列化是实现数据持久化和网络传输的关键技术。本文将深入探讨Java序列化的原理、应用场景以及如何通过代码示例实现对象的序列化与反序列化过程。从基础概念到实践操作,我们将一步步揭示这一技术的魅力所在。
|
27天前
|
存储 缓存 NoSQL
一篇搞懂!Java对象序列化与反序列化的底层逻辑
本文介绍了Java中的序列化与反序列化,包括基本概念、应用场景、实现方式及注意事项。序列化是将对象转换为字节流,便于存储和传输;反序列化则是将字节流还原为对象。文中详细讲解了实现序列化的步骤,以及常见的反序列化失败原因和最佳实践。通过实例和代码示例,帮助读者更好地理解和应用这一重要技术。
26 0
|
2月前
|
存储 XML JSON
用示例说明序列化和反序列化
用示例说明序列化和反序列化
|
1月前
|
Java 程序员 C#
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
【类的应用】C#应用之派生类构造方法给基类构造方法传参赋值
13 0
|
2月前
|
JSON 安全 编译器
扩展类实例的序列化和反序列化
扩展类实例的序列化和反序列化
35 0