(转).NET对象的XML序列化和反序列化

C#中实现XML序列化和反序列化的详细指南 在XML中,属性(Attributes)和子元素(Elements)都有其特定的用途和上下文。属性通常用于提供有关元素的附加信息,而子元素则用于表示复杂信息或数据的嵌套结构。在C#中,使用时,可以通过类的字段和属性来控制哪些成员应被序列化为属性或子元素。在第四章,我们将深入探讨如何在C#中自定义序列化输出,以创建符合特定需求的XML格式。这个过程涉及对XmlWriter和等类的使用,以及如何在自定义操作中处理复杂的数据结构和性能优化。 阅读详情
        虽说是转的,不过之前还是说点自己的感受.最近被朋友拉去参加一个面向代理的程序设计竞赛,挺有意思的,类似面向服务,不过要求使用.NET平台,虽然以前用过,不过对.NET的理解实在没法跟JAVA比,不过越用越发现,落后的东西各有各的长处,先进的东西都是一样一样的,哈哈.真没想到,连JAXB在.NET里都有,本来还打算自己写个类似的类库呢,顿时对.NET好感倍增,现在JDBC也学.NET引入了类似DATASET,JAVA学引入了类似属性的注释类型,真的是越来越像的.反而到觉得,让两者区分的却存在于语言本身,而非类库.举个简单的例子,JAVA的类支持静态代码段,典型的设计模式上的应用就是JDBC利用这种机制实现了桥梁模式,而C#却不能,当然,我对专门针对.NET的设计模式并不了解,这不代表没法实现,就好比GOF的一些方法移到JAVA里就可以更简单的实现,或是JAVA语言本身就无法实现一样,语言给我们的只是代码级别的区别.而整体的思想大家却都一样,就好象这次的面向代理的运行容器也是从开源社区学JAVA的.大家的目的都是一样的,只是途径不通而已,各有长短而已.下面就是转的了,只为记录下,以后忘了能查,对MSDN实在没啥信心:

 

一 概述
.NET Framework为处理XML数据提供了许多不同的类库。XmlDocument类能让你像处理文件一样处理xml数据,而XmlReader、XmlWriter和它们的派生类使你能够将xml数据作为数据流处理。
XmlSerializer则提供了另外的方法,它使你能够将自己的对象串行化和反串行化为xml。串行化数据既能够让你像处理文件一样对数据进行随机处理,同时又能跳过你不感兴趣的数据。
二 主要类库介绍
   .NET 支持对象xml序列化和反序列化的类库主要位于命名空间System.Xml.Serialization中。
   1.  XmlSerializer 类
   该类用一种高度松散耦合的方式提供串行化服务。你的类不需要继承特别的基类,而且它们也不需要实现特别的接口。相反,你只需在你的类或者这些类的公共域以及读/写属性里加上自定义的特性。XmlSerializer通过反射机制读取这些特性并用它们将你的类和类成员映射到xml元素和属性。
   2. XmlAttributeAttribute 类
   指定类的公共域或读/写属性对应xml文件的Attribute。
   例:[XmlAttribute(“type”)] or [XmlAttribute(AttributeName=”type”)]
   3. XmlElementAttribute类
   指定类的公共域或读/写属性对应xml文件的Element。
   例:[XmlElement(“Maufacturer”)] or [XmlElement(ElementName=”Manufacturer”)]
   4. XmlRootAttribute类
   Xml序列化时,由该特性指定的元素将被序列化成xml的根元素。
   例:[XmlRoot(“RootElement”)] or [XmlRoot(ElementName = “RootElements”)]
   5. XmlTextAttribute 类
   Xml序列化时,由该特性指定的元素值将被序列化成xml元素的值。一个类只允许拥有一个该特性类的实例,因为xml元素只能有一个值。
   6. XmlIgnoreAttribute类
   Xml序列化时不会序列化该特性指定的元素。
三 实例
   下面例子中的xml schema 描述了一个简单的人力资源信息,其中包含了xml的大部分格式,如xml 元素相互嵌套, xml元素既有元素值,又有属性值。
   1. 待序列化的类层次结构
    [XmlRoot("humanResource")]
    public class HumanResource
    {
        #region private data.
        private int m_record = 0;
        private Worker[] m_workers = null;
        #endregion
 
        [XmlAttribute(AttributeName="record")]
        public int Record
        {
            get { return m_record; }
            set { m_record = value; }
        }
 
        [XmlElement(ElementName="worker")]
        public Worker[] Workers
        {
            get { return m_workers; }
            set { m_workers = value; }
        }
}
 
    public class Worker
    {
        #region private data.
        private string m_number = null;
        private InformationItem[] m_infoItems = null;
        #endregion
 
        [XmlAttribute("number")]
        public string Number
        {
            get { return m_number; }
            set { m_number = value; }
        }
 
        [XmlElement("infoItem")]
        public InformationItem[] InfoItems
        {
            get { return m_infoItems; }
            set { m_infoItems = value; }
        }
}
 
    public class InformationItem
    {
        #region private data.
        private string m_name = null;
        private string m_value = null;
        #endregion
 
        [XmlAttribute(AttributeName = "name")]
        public string Name
        {
            get { return m_name; }
            set { m_name = value; }
        }
 
        [XmlText]
        public string Value
        {
            get { return m_value; }
            set { m_value = value; }
        }
}
   2. 序列化生成的xml结构
        <?xml version="1.0" ?>
- < humanResource xmlns:xsi =" http://www.w3.org/2001/XMLSchema-instance " xmlns:xsd =" http://www.w3.org/2001/XMLSchema " record =" 2 ">
- < worker number =" 001 ">
                  < infoItem name =" name "> Michale </ infoItem >
                  < infoItem name =" sex "> male </ infoItem >
                  < infoItem name =" age "> 25 </ infoItem >
             </ worker >
- < worker number =" 002 ">
                  < infoItem name =" name "> Surce </ infoItem >
                  < infoItem name =" sex "> male </ infoItem >
                  < infoItem name =" age "> 28 </ infoItem >
            </ worker >
          </ humanResource >
   3. 利用XmlSerializer类进行序列化和反序列化的实现(一般利用缓存机制实现xml文件只解析一次。)
    public sealed class ConfigurationManager
    {
        private static HumanResource m_humanResource = null;
        private ConfigurationManager(){}
 
        public static HumanResource Get(string path)
        {
            if (m_humanResource == null)
            {
                FileStream fs = null;
                try
                {
                    XmlSerializer xs = new XmlSerializer(typeof(HumanResource));
                    fs = new FileStream(path, FileMode.Open, FileAccess.Read);
                    m_humanResource = (HumanResource)xs.Deserialize(fs);
                    fs.Close();
                    return m_humanResource;
                }
                catch
                {
                    if (fs != null)
                        fs.Close();
                    throw new Exception("Xml deserialization failed!");
                }
 
            }
            else
            {
                return m_humanResource;
            }
        }
 
        public static void Set(string path, HumanResource humanResource)
        {
            if (humanResource == null)
                throw new Exception("Parameter humanResource is null!");
           
            FileStream fs = null;
            try
            {
                XmlSerializer xs = new XmlSerializer(typeof(HumanResource));
                fs = new FileStream(path, FileMode.Create, FileAccess.Write);
                xs.Serialize(fs, humanResource);
                m_humanResource = null;
                fs.Close();
            }
            catch
            {
                if (fs != null)
                    fs.Close();
                throw new Exception("Xml serialization failed!");
            }
        }
    }
四 说明
   1. 需要序列化为xml元素的属性必须为读/写属性;
   2. 注意为类成员设定缺省值,尽管这并不是必须的。
 
GEO生信数据挖掘实战:从临床信息提取到多维分组可视化(聚类与PCA) 本文以GSE1297数据集为例,详细讲解了GEO生信数据挖掘中临床信息提取与分组构建的实战流程。通过R语言解析样本元数据,利用字符串处理技术从文本中精准构建疾病与对照分组,并强调使用层次聚类图和PCA图进行可视化验证,确保分组合理性与分析可靠性,为后续差异表达等高级分析奠定坚实基础。 阅读详情

相关推荐

Duplicate Cleaner Pro 5.16 保姆级教程:如何用哈希值精准清理重复文件(附音频/视频模式详解)

本文详细介绍了Duplicate Cleaner Pro 5.16如何利用哈希值技术精准清理重复文件,特别针对音频、视频和图片等多媒体文件提供了专业解决方案。通过哈希算法比对和多媒体特征识别,帮助用户高效管理存储空间,提升文件整理效率。

weixin_27032989的博客 565

XML与DataSet的相互转换类

送给大家一个XML与DataSet的相互转换的类:XmlDatasetConvert 该类提供了四种方法:1、将xml对象内容字符串转换为DataSet2、将xml文件转换为DataSet3、将DataSet转换为xml对象字符串4、将DataSet转换为xml文件 XmlDatasetConvert.csusing System;using System.Collections.Ge...

aome1470的博客 208

OpenSceneGraph编译、安装、开发环境

详细描述WIndows 10下使用Visual Studio 2019编译OpenSceneGraph 3.6.5的操作流程

国产CAx(CAD/CAE/CAM)软件研发 8771

(转).NET+实体类反射得到XML(序列化为XML)

项目需要和别的系统交互,要求只能用XML,⊙﹏⊙b汗的很 时间不够先通过vs 带的工具xsd.exe 命令 生成对应xml的xsd ( 打开vs 的如命令提示 xsd InpXmlSt.xsd /t:lib /l:vb /c  /o:E:/Uc/操作其它进程测试3/InpOrdXmlDemo/InpXmlOpClasss)1. 首先在VS2005中添加一个XSD文件。2. 使用VS

maxjove的专栏 2145

如何评估一颗 AI 芯片的真实性能?TOPS、FPS 与 Token/sec 全解析

AI 芯片在实际部署中,其理论峰值性能往往无法反映真实执行效率。如何科学评估一颗 AI 芯片的“真实性能”,已成为芯片选型与系统集成环节中的关键技术问题。本文从工程实战角度出发,深入拆解当前常用性能评估指标(TOPS、FPS、Token/sec)背后的定义逻辑与使用陷阱,并结合推理模型部署与执行路径,系统讲解 AI 芯片在不同场景下的性能验证方法。通过对芯片算力-功耗-调度三维关系的分析,读者将掌握评估一颗 AI 芯片是否“跑得动业务”的核心判断能力。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 3389

(二)MS-MPI多机通信

1.关于MPI多机通信 一台计算机处理数据的能力是有限的,MPI的主要作用就是用来实现并行计算机,即将多台主机联机,实现大规模、高性能的计算机机群。我们知道一台计算机同时运行多个进程时,由于计算机资源是共享的,多个进程都会占用一些资源,每个进程运行的效率就会降低,比如当一台计算机同时跑着多个大型应用时会变得非常卡顿。所谓多机通信,可以理解为将本应该在同一台主机上运行的多个进程分配到多台主机上,以往...

xinwuya_的博客 4392

XML 反序列化

XML 反序列化成Model 1.方法: public static object DeserializeXml(Type type, string xml) { using (StringReader sr = new StringReader(xml)) { XmlSerializer desXml = new XmlSerializer(type); ...

PinkCoder 3248

Coze智能体开发:扣子空间制作PPT功能

扣子空间内置了丰富的场景模板,涵盖人文历史、学术分享、研究报告、数据分析等场景,可以满足不同用户的需求。 你只需输入与制作 PPT 相关的提示词,Agent 就能基于这些提示词展示思考的过程,并自动生成完整的 PPT。

王国平的博客 2052

.Net 序列化学习笔记

     .Net中的序列化方法有三种:XML 序列化、SOAP 序列化和二进制序列化。若是序列化到文件的话,前两者生成的是 XML 文件,二进制序列化生成二进制文件。     跟序列化相关的两个类型:     SerializableAttribute:指示一个类是可以序列化的。     ISerializable:使对象可以自己控制其序列化和反序列化的过程。     列表比较三种序列化方法

一寒的博客----我亦无它,唯学习尔! 630

基于Simulink的强化学习(DQN)自主调节占空比

摘要:本文介绍了一种基于Simulink的强化学习(DQN)方法,用于Buck变换器的自主占空比调节。通过建立马尔可夫决策过程模型,设计了包含状态、动作和奖励函数的强化学习框架,并在Simulink中实现了Buck主电路、RL接口模块和DQN智能体的集成。实验表明,相比传统PID控制,DQN方法在负载突变和输入跌落等复合扰动下表现出更好的鲁棒性,电压超调小于1%,恢复时间缩短至0.3ms。文章还详细讨论了关键设计技巧、工程挑战及对策,并提出了多目标优化、先进算法应用等扩展方向,为智能电源控制提供了新思路。

amy_mhd的博客 75

Arduino与震动马达模块握手

震动马达模块采用采用高品质手机震动马达,适用于震动感互动产品的制作,可穿戴智能设备震动提醒,适合作为非可听指示器的小型振动马达。当输入为高电平时电动机会震动,就像你的静音模式的手机一样。

vor234的博客 5847

C# XML序列化

XML 序列化中的中心类是 XmlSerializer 类,此类中最重要的方法是 Serialize 和 Deserialize 方法 。 XmlSerializer 创建 C# 文件并将其编译为 .dll 文件,以执行此序列化。 XML 序列化程序生成器工具 (Sgen.exe) 旨在预先生成要与应用程序一起部署的这些序列化程序集,并改进启动性能

XPY567 6106

Redhawk: dynamic ir drop分析(Clock Buffer Clustering)

在dynamic分析中,ir drop问题多出现在三种情况下,缺power mesh,缺power switch,clock cell过于密集。 前两种情况通过选中具体instance查看min res path都比较容易分析出来,而且大部分问题都出现在channel里,这里不多做赘述。 clock cell过于密集这是观察结果,缺少报告支持,这里分享一下分析方法。 首先,选中压降超过signoff标准的instance,(Results->List of Worst Instance DVD中

m0_61544122的博客 5271

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

(转) .NET对象的XML序列化和反序列化

序列化的概念 序列化是指一个对象的实例可以被保存,保存成一个二进制串,当然,一旦被保存成二进制串,那么也可以保存成文本串了。比如,一个计数器,数值为2,我们可以用字符串“2”表示。如果有个对象,叫做connter,当前值为2,那么可以序列化成“2”,反向的,也可以从“2”得到值为2的计数器实例。这样,关机时序列化它,开机时反序列化它,每次开机都是延续的。不会都是从头开始。 序列化概念的提出和...

weixin_30740295的博客 93

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

xml 序列化操作

第一,首先有一个要被序列化成xml的类 public class XmlObject{private string _UserName="hello";public string UserName{get{return _UserName;}set{_UserName = value;}} //序列化时.方法是没被序列化的.这里算白写了protected string GetSomeThing

路过秋天 - 理想很美好,现实很残酷,坚持在路上,只因初心仍存 244

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C#对象XML序列化(一):序列化方法和常用特性

.Net Framework提供了对应的System.Xml.Seriazliation.XmlSerializer负责把对象序列化到XML,和从XML中反序列化为对象。Serializer的使用比较直观,需要多注意的是XML序列化相关的Attribute,怎么把这些attribute应用到我们的对象,以及对象公共属性上面去,生成满足预期格式的XML。 本文列出了最常用的方法和特性,涵盖日常大部分...

u011555996的博客 3060

Json.NET 介绍及文档

介绍 Json.NET 是用于.NET平台的高效的Json 框架。更多资源查看:http://www.newtonsoft.com/json/help/html/SerializingJSON.htm 优点和功能 .net 对象和Json对象之间相互灵活的Json序列化。Linq到Json的手动读写Json对象。高效率:比.Net的内置Json序列化快。缩进式写入,便于阅读JsonJso

daimeisi123的专栏 703

NET对象的XML序列化和反序列化(一)

 一 概述.NET Framework为处理XML数据提供了许多不同的类库。XmlDocument类能让你像处理文件一样处理xml数据,而XmlReader、XmlWriter和它们的派生类使你能够将xml数据作为数据流处理。XmlSerializer则提供了另外的方法,它使你能够将自己的对象串行化和反串行化为xml。串行化数据既能够让你像处理文件一样对数据进行随机处理,同时又能跳过你

gooer的专栏 879

C#/.NET 将对象序列化成XML和将XML反序列化成对象

///     /// XMLHelper     ///     public static class XMLHelper     {         ///         /// 反序列化         ///         /// 类型         /// XML字符串         ///         public static objec

蹉跎的岁月里抹去时间的伤 4666

Json.Net学习笔记

摘自: http://www.verydemo.com/demo_c360_i45119.html 分类:编程语言/ASP.NET/文章 导读:string googleSearchText = @"{ ""responseData"": { ""results"": [ { ""GsearchResultClass"": ""GwebSearch"", ""unescapedU...

weixin_30697239的博客 116

.NET对象的XML序列化和反序列化

 序列化的概念 序列化是指一个对象的实例可以被保存,保存成一个二进制串,当然,一旦被保存成二进制串,那么也可以保存成文本串了。比如,一个计数器,数值为2,我们可以用字符串“2”表示。如果有个对象,叫做connter,当前值为2,那么可以序列化成“2”,反向的,也可以从“2”得到值为2的计数器实例。这样,关机时序列化它,开机时反序列化它,每次开机都是延续的。不会都是从头开始。序列化概

史志营的专栏 4万+

c#中的序列化和反序列化

第一步:什么是序列化和反序列化 序列化定义:将对象转化为容易传输的格式的过程。 反序列化定义:重新解析构造被序列化的对象 第二步:为什么要序列化和反序列化 当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再回复为对象。 我们经常需要将对象的字段值保存在磁盘...

a720561252803的博客 1万+

【XML】XML序列化与反序列化

XML的序列化与反序列化 问题:什么是序列化? 序列化(Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。 在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。 把对象转换为字节序列的过程称为对象的序列化。 把字节序列恢复为对象的过程称为对象的反序列化。 对象的序列化主要有两种用途: 把对象的字节...

学海无涯苦作舟 7454

VB.NET反序列化XML

 序列化,是将对象状态转换为可保持或传输的格式的过程。 与序列化相反的是反序列化,它将流转换为对象。这两个过程结合起来,就可以存储和传输数据。这就是序列化的意义所在。 在VB.NET中转换、处理和生成XML文档时,需要用到一些XML专用名称空间中的类,这些名称空间包括: System.Xml    该名称空间提供了对各种XML标准(包括DTD、名称空间、DOM、XDR(XML

liuchuan__________的博客 5850

对象的Xml序列化和反序列化

这篇随笔对应的.Net命名空间是System.Xml.Serialization;文中的示例代码需要引用这个命名空间。为什么要做序列化和反序列化?.Net程序执行时,对象都驻留在内存中;内存中的对象如果需要传递给其他系统使用;或者在关机时需要保存下来以便下次再次启动程序使用就需要

玉开的技术博客 2332
上一篇: 对J2ME一些开发问题解决方案的想法
下一篇: j3d vs jogl
dongchengok
博客等级 码龄20年 10粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值