序列化和反序列化是指什么?

序列化(seriallization): 将对象转化为便于传输的数据格式, 常见的序列化格式:二进制格式,字节数组,json字符串,xml字符串。
反序列化(deseriallization):将序列化的数据恢复为对象的过程。

XmlSerializer类

  该类用一种高度松散耦合的方式提供串行化服务。你的类不需要继承特别的基类,而且它们也不需要实现特别的接口。相反,你只需在你的类或者这些类的公共域以及读/写属性里加上自定义的特性。XmlSerializer通过反射机制读取这些特性并用它们将你的类和类成员映射到xml元素和属性(在对象和 XML 文档之间进行序列化和反序列化操作)。

.NET-XML序列化和反序列化简单示例代码

using System.IO;
using System.Xml.Serialization; namespace Practices.Common
{
public class SimpleSerializer
{
/// <summary>
/// Model实体对象序列化为XML字符串
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="t">Model实体对象</param>
/// <returns></returns>
public static string SerializeXMLL<T>(T t)
{
using (StringWriter sw = new StringWriter())
{
XmlSerializer xmlSerializer = new XmlSerializer(t.GetType());
xmlSerializer.Serialize(sw, t);
return sw.ToString();
}
} /// <summary>
/// XML反序列化为对象
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="xml">xml字符串</param>
/// <returns></returns>
public static T Deserialize<T>(string xml)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
StringReader stringReader = new StringReader(xml);
return (T)xmlSerializer.Deserialize(stringReader);
} }
}

XmlTypeAttribute类

   该类主要控制当属性目标由XML序列化时生成的XML节点。

应用示例

    /// <summary>
/// Envelope
/// </summary>
[XmlType(TypeName = "envelope")]
public class CityRes
{
public Header header { get; set; } public Response response { get; set; } }

XmlElementAttribute类

  该类用于指示公共字段或属性在XML序列化或反序列化包含它们的对象时表示XML元素。

应用示例

    /// <summary>
/// Envelope
/// </summary>
public class CityRes
{
/// <summary>
/// header
/// </summary>
[XmlElement("header")]
public Header header { get; set; } /// <summary>
/// response
/// </summary>
[XmlElement("response")]
public Response response { get; set; } }

XmlAttributeAttribute类

  该类指定XML序列化必须将类成员序列化为XML属性。

应用示例

    /// <summary>
/// Version
/// </summary>
public class Version
{
/// <summary>
/// port
/// </summary>
[XmlAttribute("port")]
public string port { get; set; } /// <summary>
/// host
/// </summary>
[XmlAttribute("host")]
public string host { get; set; } /// <summary>
/// text
/// </summary>
[XmlAttribute("text")]
public string text { get; set; } }

XmlArrayAttribute类

  该类主要用于XML元素数组的应用(相当于就是集合的声明)。

应用示例

   [XmlArray]
public Item []Items
{
get{return items;}
set{items = value;}
}

XmlTextAttribute类

  当序列化或反序列化包含该成员的类时,向XML序列化指示应将该成员作为XML文本处理。

应用示例

    [System.Xml.Serialization.XmlTextAttribute()]
public string[] Text
{
get
{
return this.textField;
}
set
{
this.textField = value;
}
}

  

XmlIgnoreAttribute类

  指示该特性修饰的对象在Xml序列化时不会序列化该特性指定的元素。

应用示例

public class TeamGroup
{ [XmlIgnore]
public string Comment; public string GroupName;
}

用来控制XML序列化的属性汇总

通过将下表中的特性应用于类和类成员,可以控制 XmlSerializer 序列化或反序列化该类的实例的方式。 若要了解这些属性如何控制 XML 序列化,请参阅使用属性控制 XML 序列化

特性 适用对象 指定
XmlAnyAttributeAttribute 公共字段、属性、参数或返回 XmlAttribute 对象数组的返回值。 反序列化时,将会使用 XmlAttribute 对象填充数组,而这些对象代表对于架构未知的所有 XML 特性。
XmlAnyElementAttribute 公共字段、属性、参数或返回 XmlElement 对象数组的返回值。 反序列化时,将会使用 XmlElement 对象填充数组,而这些对象代表对于架构未知的所有 XML 元素。
XmlArrayAttribute 公共字段、属性、参数或返回复杂对象的数组的返回值。 数组成员将作为 XML 数组的成员生成。
XmlArrayItemAttribute 公共字段、属性、参数或返回复杂对象的数组的返回值。 可以插入数组的派生类型。 通常与 XmlArrayAttribute 一起应用。
XmlAttributeAttribute 公共字段、属性、参数或返回值。 成员将作为 XML 属性进行序列化。
XmlChoiceIdentifierAttribute 公共字段、属性、参数或返回值。 可以使用枚举进一步消除成员的歧义。
XmlElementAttribute 公共字段、属性、参数或返回值。 字段或属性将作为 XML 元素进行序列化。
XmlEnumAttribute 作为枚举标识符的公共字段。 枚举成员的元素名称。
XmlIgnoreAttribute 公共属性和公共字段。 序列化包含类时,应该忽略属性或字段。
XmlIncludeAttribute 公共派生类声明,以及 Web 服务描述语言 (WSDL) 文档的公共方法的返回值。 生成要在序列化时识别的架构时,应该将该类包括在内。
XmlRootAttribute 公共类声明。 控制视为 XML 根元素的属性目标的 XML 序列化。 使用该属性可进一步指定命名空间和元素名称。
XmlTextAttribute 公共属性和公共字段。 属性或字段应该作为 XML 文本进行序列化。
XmlTypeAttribute 公共类声明。 XML 类型的名称和命名空间。

参考文章

C#: .net序列化及反序列化

用来控制XML序列化的属性

使用属性控制XML序列化

微软官方文档-XML相关类汇总

.NET中XML序列化和反序列化常用类和用来控制XML序列化的属性总结(XmlSerializer,XmlTypeAttribute,XmlElementAttribute,XmlAttributeAttribute,XmlArrayAttribute...)的更多相关文章

  1. Xml序列化、反序列化帮助类

    之前从网络上找了一个Xml处理帮助类,并整理了一下,这个帮助类针对Object类型进行序列化和反序列化,而不需要提前定义Xml的结构,把它放在这儿供以后使用 /// <summary> / ...

  2. java中的序列化与反序列化,还包括将多个对象序列化到一个文件中

    package Serialize; /** * Created by hu on 2015/11/7. */ //实现序列化必须实现的接口,这就是一个空接口,起到标识的作用 import java. ...

  3. SerializeUtil 序列化,反序列化工具类

    package cloud.app.prod.home.utils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutp ...

  4. .net core Json字符串的序列化和反序列化通用类源码,并模拟了10万数据对比DataContractJsonSerializer和Newtonsoft性能

    我们在开发中Json传输数据日益普遍,有很多关于Json字符串的序列化和反序列化的文章大多都告诉你怎么用,但是却不会告诉你用什么更高效.因为有太多选择,人们往往会陷入选择难题. 相比.NET Fram ...

  5. XML序列化反序列化—常用类

    public class XMLSerializer    {        #region (public) xml序列化        /// <summary>        /// ...

  6. PHP序列化、反序列化常用的魔术方法

    __wakeup() //使用unserialize时触发__sleep() //使用serialize时触发__destruct() //对象被销毁时触发__call() //在对象上下文中调用不可 ...

  7. Java 中你必须了解的常用类(8)

    Java 中的包装类 相信各位小伙伴们对基本数据类型都非常熟悉,例如 int.float.double.boolean.char 等.基本数据类型是不具备对象的特性的, 比如基本类型不能调用方法.功能 ...

  8. C# Json 序列化和反序列化 工具类 Newtonsoft.Json.dll

    引用: Newtonsoft.Json.dll // 引用: using Newtonsoft.Json; using Newtonsoft.Json.Converters; // 定义 实体测试类 ...

  9. 序列化和反序列化(json 和pickle)dumps 为序列化, json为反序列化

    json 可以在不同语言中进行使用 下面先介绍一下json的适用方法 import json, pickle t1 = { 'name':'alex', ', ' } t1 = json.dumps( ...

随机推荐

  1. shell脚本部署zookeeper-3.4.10 [含注释]

    文章目录 zk_install.sh conf/config conf/zoo_template.cfg package zk_install.sh #!/bin/bash base_path=$(c ...

  2. mysql 事务 隔离性 锁

    1.四大特性 1.1 原子性(Atomicity) 一个事务是不可分割的最小工作单位.一个事务是不可分割的最小工作单位. 利用undo log保证原子性,undo log记录的是操作的反向语句,例如执 ...

  3. 商业智能BI不仅仅是报表工具,它的真正价值是:决策支持

    作为一个独立系统,商业智能BI解决两个问题.一是信息的发布,它可以在正确的时间向正确的人提供正确的信息.几十年来,我们看到的商业智能项目,至少有90%的项目成果变成了提供信息的报告.这种情况下,改变的 ...

  4. 拥有自助式BI要摒弃传统BI?

    简单来说BI就是从data中提取知识和信息的一套软件解决方案.商业智能 (BI,Business Intelligence) 也就是BI,是为企业把数据转换为信息.知识 ,相应蕴育而出的IT技术.企业 ...

  5. Smartbi代替Alteryx+Tableau,用1份投入如何获得2份回报?

    Smartbi是国内一家知名的BI厂商,Alteryx.Tableau是国外两款重要的BI工具,它们都是在BI领域内提供特定的功能,以满足企业的数据分析需求.那么,对于用户来说,在选择BI工具的时候要 ...

  6. 【C# 线程】线程局部存储(TLS)理论部分 ThreadStatic|LocalDataStoreSlot|ThreadLocal<T>

    线程本地存储(TLS:Thread Local Storage) 线程本地存储(Thread Local Storage),字面意思就是专属某个线程的存储空间.变量大体上分为全局变量和局部变量,一个进 ...

  7. Linux中查看进程与日志

    转至:https://www.cnblogs.com/dengxiaoning/p/13336778.html Linux尽管使用频繁,仍然每次都还是需要到处去找相关的命令,如进程,日志之类的,既然这 ...

  8. Weblogic补丁升级常见问题

    转至:https://blog.csdn.net/weixin_44659716/article/details/106804177 常用企业级版本:Weblogic 11g(weblogic10.3 ...

  9. LeetCode-054-螺旋矩阵

    螺旋矩阵 题目描述:给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素. 示例说明请见LeetCode官网. 来源:力扣(LeetCode) 链接:http ...

  10. C++_Leecode20有效的括号

    一.题目介绍 1.题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合. 左括号必须以正 ...