Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >.NET中XML序列化和反序列化常用类和用来控制XML序列化的属性总结(XmlSerializer,XmlTypeAttribute,XmlElementAtt

.NET中XML序列化和反序列化常用类和用来控制XML序列化的属性总结(XmlSerializer,XmlTypeAttribute,XmlElementAtt

原创
作者头像
追逐时光者
发布于 2022-04-16 10:45:55
发布于 2022-04-16 10:45:55
2.5K00
代码可运行
举报
文章被收录于专栏:编程进阶实战编程进阶实战
运行总次数:0
代码可运行

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

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

XmlSerializer类

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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节点。

应用示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /// <summary>
    /// Envelope
    /// </summary>
    [XmlType(TypeName = "envelope")]
    public class CityRes
    {
        public Header header { get; set; }

        public Response response { get; set; }

    }

XmlElementAttribute类

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

应用示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /// <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属性。

应用示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /// <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元素数组的应用(相当于就是集合的声明)。

应用示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   [XmlArray]
   public Item []Items
   {
      get{return items;}
      set{items = value;}
   }

XmlTextAttribute类

  当Xml文档序列化或反序列化时使用该特性修饰的成员会作为XML文本处理。

应用示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    [System.Xml.Serialization.XmlTextAttribute()]
    public string[] Text
    {
        get
        {
            return this.textField;
        }
        set
        {
            this.textField = value;
        }
    }

XmlIgnoreAttribute类

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

应用示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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相关类汇总

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C#三十一 序列化与反序列化
序列化又称串行化,是.NET运行时环境用来支持用户定义类型的流化的机制。其目的是以某种存储形成使自定义对象持久化,或者将这种对象从一个地方传输到另一个地方。
用户9184480
2024/12/13
1180
C#XmlHelper帮助类操作Xml文档的通用方法汇总
该篇文章主要总结的是自己平时工作中使用频率比较高的Xml文档操作的一些常用方法和收集网上写的比较好的一些通用Xml文档操作的方法(主要包括Xml序列化和反序列化,Xml文件读取,Xml文档节点内容增删改的一些通过方法)。当然可能还有很多方法会漏了,假如各位同学好的方法可以在文末留言,我会统一收集起来。
追逐时光者
2022/04/16
1.9K0
xml序列化和反序列化(二)
这方法,网上一般都能找到,针对复杂的xml,可以定义不同的实体对应进行解析,这里就不多说了,我要重点说的是怎么完美解析任意xml文档,先看一下示例代码:
yaphetsfang
2020/07/30
5290
【JAVA反序列化】序列化与反序列化&Java反射&URLDNS链
只有实现了Serializable或者Externalizable接口的类的对象才能被序列化为字节序列
没事就要多学习
2024/07/18
1850
【JAVA反序列化】序列化与反序列化&Java反射&URLDNS链
C#复杂XML反序列化为实体对象两种方式
今天主要讲的是如何把通过接口获取到的Xml数据转换成(反序列化)我们想要的实体对象,当然Xml反序列化和Json反序列化的方式基本上都是大同小异。都是我们事先定义好对应的对应的Xml实体模型,不过Xml是通过XmlSerializer类的相关特性来对实体对象和 XML文档之间进行序列化和反序列化操作的。序列化和反序列化其实都还好,我们可以调用封装好的XmlHelper帮助类即可实现,最关键的是我们该如何去定义这些实体模型(Model)。当你遇到对方接口一下子返回一大串的Xml数据并且里面存在很多不同的Xml节点,你该怎么办一个一个去解析这些节点到模型上去吗?本文我主要讲两种方式,第一种方法是通过手写的方式去定义Xml的实体对象模型类,第二种方法是通过Visual Studio自带的生成Xml实体对象模型类。
追逐时光者
2022/04/16
1.7K0
Dotnet反序列化——XmlSerializer链
本文很大程度参考了Y4er师傅的文章:https://github.com/Y4er/dotnet-deserialization/blob/main/dotnet-serialize-101.md
ConsT27
2022/03/28
5270
Dotnet反序列化——XmlSerializer链
Java对象和XML相互转换
JDK中JAXB相关的重要Class和Interface:(来源于百度百科JAXB)
JokerDJ
2023/11/27
6660
【C# XML 序列化】开篇
XML 序列化中的中心类是 XmlSerializer 类,此类中最重要的方法是 Serialize 和 Deserialize 方法 。XmlSerializer 创建 C# 文件并将其编译为 .dll 文件,以执行此序列化。XML 序列化程序生成器工具 (Sgen.exe) 旨在预先生成要与应用程序一起部署的这些序列化程序集,并改进启动性能。XmlSerializer 生成的 XML 流符合万维网联合会 (W3C) XML 架构定义语言 (XSD) 1.0 建议。而且,生成的数据类型符合文档“XML 架构第 2 部分:数据类型”。
用户9127601
2023/12/15
5510
【C# XML 序列化】开篇
详解C# 序列化和反序列化
今天我利用这篇文章给大家讲解一下 C# 中的序列化与反序列化。这两个概念我们在开发中经常用到,但是我们绝大部分只用到了其中的一部分,剩下的部分很多开发人员并不清楚,伸着可以说是不知道。因此我希望通过这篇文章能让各位对序列化和反序列化的知识有更进一步的掌握。废话不多说开始进入正题。
喵叔
2020/09/08
4.4K0
详解C# 序列化和反序列化
.NET 中的序列化 & 反序列化
序列化:将对象的状态信息及类型信息,转换为一种易于传输或存储形式(流,即字节序列)的过程。
雪飞鸿
2019/02/27
1.2K0
C#实现Xml序列化与反序列化的方法
本文实例讲述了C#实现Xml序列化与反序列化的方法。分享给大家供大家参考。具体实现方法如下:
跟着阿笨一起玩NET
2022/05/10
1.3K0
菜菜从零学习WCF十(序列化)
 本次课程的主要内容包括以下四格部分:DataContractSerializer、序列化、反序列化、XmlSerializer
aehyok
2018/09/11
1.1K0
.Net 反序列化学习之 DataContractSerializer
DataContractSerializer 是一个序列化工具,可以将 类实例序列化为xml内容。DataContractSerializer 与 XmlSerializer 有很多相似之处,比如 都将类型实例序列化为xml数据、在初始化序列化器时 都需要先传入目标类型、都会依据目标类型 生成专门的动态代码用于完成序列化和反序列化。不过 XmlSerializer生成的动态代码可以单步跟进去,而 DataContractSerializer 生成的动态代码无法查看,也就无从知道它反序列化的细节。
Seebug漏洞平台
2021/06/17
1.1K0
C#的序列化和反序列化
在现代软件开发中,序列化与反序列化是数据持久化和交换的关键技术。C# 提供了多种序列化技术,包括二进制序列化、XML序列化、JSON序列化等。本文将深入探讨这些技术的工作原理、使用场景、最佳实践以及一些高级技巧。
Michel_Rolle
2024/10/09
2.5K0
对象的序列化与反序列化
对象的序列化就是将Object转换成byte序列,反之叫做对象的反序列化 1.序列化流: ObjectOutputStream,是过滤流----->writeObject 反序列化流: ObjectInputStream ------->readObject 2.序列化接口: Serializable 对象必须实现序列化接口,才能进行序列化,否则将会出现异常 这个接口没有任何方法,只是一个标准 3.一个类实现了序列化接口,子类也就都能进行序列化了 java.io 接口 Serializable publ
拾点阳光
2018/05/11
1.1K0
xml序列化和反序列化(一)
  最近项目中需要调用第三方webservice,入参和出参采用xml格式,大致如下:
yaphetsfang
2020/07/30
9830
C#序列化与反序列化详解
序列化是通过将对象转换为字节流,从而存储对象或将对象传输到内存,数据库或文件的过程。主要用途是保存对象的状态,包括对象的数据,以便能够在需要是重建对象。反向过程称为 反序列化。
用户9127601
2021/11/01
1.1K0
C# 序列化与反序列化
对象持久化到文本文件,策略是:将对象的属性值打散,拆解,分别存储。 序列化:  保存对象的"全景图"  序列化是将对象转换为可保存或可传输的格式的过程  三种:   二进制序列器:    对象序列化之后是二进制形式的,通过BinaryFormatter类来实现的,这个类位于System.Runtime.Serialization.Formatters.Binary命名空间下     [Serializable] //使对象可序列化(必须添加)      特性       程序集,类,方法,属性都可以使用特性
房上的猫
2018/03/14
1K0
SpringBoot的序列化和反序列化
Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程。
全栈程序员站长
2022/09/13
2.6K0
SpringBoot的序列化和反序列化
C++ 序列化和反序列化
问题: 在内存里存放的任何数据,它最基础的存储单元也是二进制比特,也就是说,我们应用程序操作的对象,它在内存中也是使用二进制存储的,既然都是二进制,为什么不能直接把内存中,对象对应的二进制数据直接通过网络发送出去,或者保存在文件中呢?为什么还需要序列化和反序列化呢?
全栈程序员站长
2022/07/05
1.6K0
C++ 序列化和反序列化
相关推荐
C#三十一 序列化与反序列化
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验