c#中对XML反序列化

生成对象类

可以手动生成。

也可以使用windows系统自带的xsd.exe工具。

根据不同的windows版本,该工具可能在:

C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\NETFX 4.7.2 Tools
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.7.2 Tools
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools

通过

xsd sample.xml

生成schema文件sample.xsd

然后通过

xsd sample.xsd /c

生成c文件。根据根节点名称会生成对应的class文件代表对应的对象类。

名称修改

如果反序列化时,需要使用不同的属性名来存储,比如xml中使用中文,而json想改为使用英文字段,可以通过XmlElementXmlRootAttribute元素对类进行装饰。

如根节点:

[System.Xml.Serialization.XmlRootAttribute(Namespace = "", ElementName = "检测信息", IsNullable = false)]
public partial class SampleClass {}

此时,会将根节点检测信息,读入SampleClass节点

对于子节点:

[XmlElement(ElementName = "公司名称")]
public string CompanyName
{
    get;
    set;
}

可以将公司名称节点读入CompanyName节点。

数据格式化

对于特定类别的数据格式(如时间日期),想对节点数据格式化解析,可以增加私有属性,并且修改公共属性的set方式,解析格式化后再存入私有属性。

如对于XML中yyyy年MM月dd日HH时mm分ss秒格式的日期,想输出为yyyy-MM-dd HH:mm:ss格式:

        public static string TestDateFormatIn = "yyyy年MM月dd日HH时mm分ss秒";
        public static string TestDateFormatOut = "yyyy-MM-dd HH:mm:ss";

        //公共属性,反序列化时使用该属性
        public string DATE
        {
            get
            {
                return this.TestDateFormatted;
            }
            set
            {
                System.DateTime parsedDate;
                if (System.DateTime.TryParseExact(value, ArteryXmlDataHelper.TestDateFormatIn, null,
                                   System.Globalization.DateTimeStyles.None, out parsedDate))
                {
                    this.TestDateFormatted = parsedDate.ToString(ArteryXmlDataHelper.TestDateFormatOut);
                }
                else
                {
                    this.TestDateFormatted = value;
                }
            }
        }
        //私有属性,添加[XmlIgnore]使xml反序列化时忽略该属性
        [XmlIgnore]
        public string TestDateFormatted { get; set; }

反序列化

假设生成的序列化类为SampleClass,则反序列化代码为:

XmlSerializer serializer = new XmlSerializer(typeof(ArteryXmlData));
SampleClass xmlData = null;
using (var stream = new FileStream(sample.xml, FileMode.Open))
{
  xmlData = (SampleClass)serializer.Deserialize(stream);
}

原文地址:https://www.cnblogs.com/mosakashaka/p/12608867.html

时间: 2024-10-03 18:22:54

c#中对XML反序列化的相关文章

[C# | XML] XML 反序列化解析错误:<xml xmlns=''> was not expected. 附通用XML到类解析方法

使用 XML 反化时出现错误: public static TResult GetObjectFromXml<TResult>(string xmlString) { TResult result; XmlSerializer serializer = new XmlSerializer(typeof(TResult), new XmlRootAttribute("xml")); using (TextReader tr = new StringReader(xmlStri

C#中使用XML指南之读取XML

? C#中使用XML指南之读取XML ? 访问的两种模型: ? 在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,使用DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath查询,但是,DOM的缺点在于它需要一次性的加载整个文档到内存中,对于大型的文档,这会造成资源问题.流模型很好的解决了这个问题,因为它对XML文件的访问采用的是流的概念,也就是说,任何时候在内存中只有当前节点,但它也有它的不足,它是只读的,仅向前的,不能在文

MyEclipse中strust.xml代码自动提示

1.首先打开MyEclipse的窗口,选择“Window”菜单下的“Preferences”选项,如图所示 2.在打开的“Preferences”界面中搜索“xml”,选择“XML Catalog”选项,然后选择右边的“Add...”按钮 3.在打开的对话框中,在“location”中输入struts.xml文件所对应的dtd文件的所在位置,最好不要选择有中文的目录,有时候正是因为选择了中文目录,所以没有出现提示. 选择“File System”按钮,找到dtd文件的位置,“E:\struts-

解决struts2中validation.xml配置无效的问题

解决struts2中validation.xml配置无效的问题,我使用了xml的验证,却始终发现无法生效,后面发现才是xml的头文件的格式问题,修改了一下就好了. 成功的xml <!DOCTYPE validators PUBLIC "-//Apache Struts//XWork Validator 1.0.2//EN" "http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"> <val

maven新建Spring MVC + MyBatis + Oracle的Web项目中pom.xml文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion&

C#.Net中操作XML方法一

我们知道XML是一种可标记性的语言,用来标记数据.定义数据类型,是一种执行用户对自己的标记语言进行定义的源语言.由于结构好.而且easy理解,就好比一棵树,层次关系分明,因此也经常把一些数据存储到XML文件里,以下就说一下怎样在C#中操作XML文件. 经常使用类 XmlDocument:XML的文档.就好比一棵树. XmlNode:XML中的结点类,就好比树枝. XmlElement:XML中元素,就好比树枝上的叶子. 既然我们已经了解这几个经常使用类的,那么让你画一棵树是不是非常easy呢?

delphi中的XML解析控件TXMLDocument的用法

Delphi中TXMLDocument控件的用法 Delphi中对XML文件的解析做的很好,比直接使用MS的MSXML2_TLB中的接口要方便很多,现称述于下面. 在讲之前先给出一个XML实例,在讲某些部分是要结合实例比较容易理解. 1<?xmlversion="1.0"encoding="gb2312"?><!--文档版本信息,注释格式同HTML--> 2<XMLPackage> 3<clinetinfoip=”202.1

第五篇:在SOUI中使用XML布局窗口

窗口布局的概念 每一个UI都是由大量的界面元素构成的,在Windows编程,这些界面元素的最小单位通常称之为控件. 布局就是这些控件在主界面上的大小及相对位置. 传统的布局一般使用一个4个绝对坐标来定义一个控件在主窗口的位置.对于窗口是固定大小的界面来说,这种方式是最简单有效的. 然而问题在于在Windows系统上编程,基本上很少有程序的窗口是固定大小的,用户希望它的窗口能够随时调整大小.调整大小后界面里的控件还能够按照一定的规则进行重排. 我自己最讨厌的就是在WM_SIZE里重排控件位置. 随

JavaScript之Ajax-4 XML解析(JavaScript中的XML、Ajax返回并解析XML)

一.JavaScript中的XML XML DOM对象 - IE 浏览器通过 ActiveXObject 对象得到 XML DOM 对象 - 其他浏览器通过 DOMParser 对象得到 XML DOM 对象 XML DOM对象的支持 - XML DOM(XML Document Object Model)定义了访问和操作XML文档的标准方法 - DOM 把 XML 文档作为树结构来查看.能够通过DOM树来访问所有元素 加载并解析XML字符串 二.Ajax返回并解析XML 使用XHR发送XML字