.NET中XML序列化和反序列化常用类和用来控制XML序列化的属性总结(XmlSerializer,XmlTypeAttribute,XmlElementAttribute,XmlAttributeAttribute,XmlArrayAttribute...)
序列化和反序列化是指什么?
反序列化(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 类型的名称和命名空间。 |
参考文章
.NET中XML序列化和反序列化常用类和用来控制XML序列化的属性总结(XmlSerializer,XmlTypeAttribute,XmlElementAttribute,XmlAttributeAttribute,XmlArrayAttribute...)的更多相关文章
- Xml序列化、反序列化帮助类
之前从网络上找了一个Xml处理帮助类,并整理了一下,这个帮助类针对Object类型进行序列化和反序列化,而不需要提前定义Xml的结构,把它放在这儿供以后使用 /// <summary> / ...
- java中的序列化与反序列化,还包括将多个对象序列化到一个文件中
package Serialize; /** * Created by hu on 2015/11/7. */ //实现序列化必须实现的接口,这就是一个空接口,起到标识的作用 import java. ...
- SerializeUtil 序列化,反序列化工具类
package cloud.app.prod.home.utils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutp ...
- .net core Json字符串的序列化和反序列化通用类源码,并模拟了10万数据对比DataContractJsonSerializer和Newtonsoft性能
我们在开发中Json传输数据日益普遍,有很多关于Json字符串的序列化和反序列化的文章大多都告诉你怎么用,但是却不会告诉你用什么更高效.因为有太多选择,人们往往会陷入选择难题. 相比.NET Fram ...
- XML序列化反序列化—常用类
public class XMLSerializer { #region (public) xml序列化 /// <summary> /// ...
- PHP序列化、反序列化常用的魔术方法
__wakeup() //使用unserialize时触发__sleep() //使用serialize时触发__destruct() //对象被销毁时触发__call() //在对象上下文中调用不可 ...
- Java 中你必须了解的常用类(8)
Java 中的包装类 相信各位小伙伴们对基本数据类型都非常熟悉,例如 int.float.double.boolean.char 等.基本数据类型是不具备对象的特性的, 比如基本类型不能调用方法.功能 ...
- C# Json 序列化和反序列化 工具类 Newtonsoft.Json.dll
引用: Newtonsoft.Json.dll // 引用: using Newtonsoft.Json; using Newtonsoft.Json.Converters; // 定义 实体测试类 ...
- 序列化和反序列化(json 和pickle)dumps 为序列化, json为反序列化
json 可以在不同语言中进行使用 下面先介绍一下json的适用方法 import json, pickle t1 = { 'name':'alex', ', ' } t1 = json.dumps( ...
随机推荐
- 通过PEB寻找函数地址
通过PEB的Ldr参数(结构体定义为_PEB_LDR_DATA),遍历当前进程加载的模块信息链表,找到目标模块. 摘自PEB LDR DATA: typedef struct _PEB_LDR ...
- 【高频Java面试题】简单说说JVM堆的内存结构和GC回收流程
目录 前言 JVM堆内存结构简述 JVM堆内存结构图 堆初体验 结构详情 新生代 老年代 永久代/元空间 GC回收流程 GC回收流程图 GC回收详细流程 查看JDK自带可视化堆空间图 总结 前言 我们 ...
- Go的优雅终止姿势
最近优化了一版程序:用到了golang的优雅退出机制. 程序使用etcd的election sdk做高可用选主,需要在节点意外下线的时候,主动去etcd卸任(删除10s租约), 否则已经下线的节点还会 ...
- Docker配置Pytorch深度学习环境
拉取镜像 $ docker pull pytorch/pytorch:1.9.1-cuda11.1-cudnn8-devel 查看本地已有镜像 $ docker images 创建容器 $ docke ...
- Smartbi代替Alteryx+Tableau,用1份投入如何获得2份回报?
Smartbi是国内一家知名的BI厂商,Alteryx.Tableau是国外两款重要的BI工具,它们都是在BI领域内提供特定的功能,以满足企业的数据分析需求.那么,对于用户来说,在选择BI工具的时候要 ...
- Linux性能优化实战CPU篇之总结(四)
一.分析CPU瓶颈 1,性能指标 a>CPU使用率 CPU使用率描述了非空闲时间占总CPU时间的百分比,根据CPU上运行任务的不同可以分为:用户CPU.系统CPU.等待I/O CPU.软中断和硬 ...
- Python "爬虫"出发前的装备之二数据先行( Requests 模块)
1. 概念 爬虫不是动物,而是一种计算机程序. 这种程序有自己特定的功能,能按照使用者给定的一系列规则自行浏览万维网并获取需要的信息.此类程序被称为 网络爬虫(web crawler) 或 网络蜘蛛( ...
- 发送POST请求(HTTP),K-V形式
/** * 发送POST请求(HTTP),K-V形式 * @param url * @param params * @author Charlie.chen ...
- android --一个简单的登录界面
MainActivity.java package com.example.empty_project; import androidx.appcompat.app.AppCompatActivity ...
- Java课程设计---安装Mysql及管理工具
1.安装mysql 没有安装包的可以在这个地址下载:https://dev.mysql.com/downloads/mysql/5.5.html 双击提供的安装包 (安装路径可以不用更改) 在弹出的窗 ...