和XmlDocument最大的不同——XmlReader逐行读取。单独很少使用,一般配合序列化(反序列化)使用,以下给出具体例子:

namespace ConsoleApplication1
{
public class CData : IXmlSerializable
{
private string cDataValue = null; public string CDataValue
{
get { return cDataValue; }
private set
{
cDataValue = value;
}
}
public CData()
{ }
public CData(string dataValue)
{
cDataValue = dataValue;
} #region IXmlSerializable Members public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
} public void ReadXml(XmlReader reader)
{
//当前读到此处的时候,
//就是CData整个字符串<Name><![CData....]></Name>一堆东西
//因此Read先读取Name,然后直接用Value获取内部的XmlCData的真实数据
if (reader.Read())
{
cDataValue = reader.Value;
}
} public void WriteXml(XmlWriter writer)
{
//把当前的数据转换成CDataSection写入
writer.WriteCData(cDataValue);
} #endregion
} // 把A改成Root
[XmlRoot(ElementName = "Root")]
public class A
{
public int Id { get; set; }
//强制指定自定义的格式化方式
[XmlElement("Name", typeof(CData))]
public CData Name { get; set; }
}
public class Program
{
static void Main(string[] args)
{
StringBuilder sbu = new StringBuilder(); //设置表头(设置编码格式和子Element的缩进符号)
XmlWriterSettings setting = new XmlWriterSettings();
setting.Indent = true;
setting.IndentChars = "\t";
setting.NewLineChars = "\r\n";
//必须用这种方式指定UTF-8输出格式,否则前面会加BOM,
//另外注意,其实现在编码仍然是UTF-16,那是因为没有用Stream类
//而是用StringBuilder,StringBuilder默认覆盖了Stream的UTF-8编码
//强制使用UTF-16导致(具体参考:http://blog.csdn.net/ding544935/article/details/7610958)
setting.Encoding = new UTF8Encoding(false); using (var writer = XmlWriter.Create(sbu, setting))
{
XmlSerializer xz = new XmlSerializer(typeof(A)); //去除命名空间
XmlSerializerNamespaces emptyNameSpace = new XmlSerializerNamespaces();
emptyNameSpace.Add(string.Empty, string.Empty); //序列化
xz.Serialize(writer,
new A { Id = , Name = new CData("董玮") }, emptyNameSpace);
}
Console.WriteLine(sbu.ToString()); //以下是反序列化
StringReader sr = new StringReader(sbu.ToString());
XmlReaderSettings rset = new XmlReaderSettings();
rset.IgnoreWhitespace = true;
using (var reader = XmlReader.Create(sr, rset))
{
A a = null;
XmlSerializer xz2 = new XmlSerializer(typeof(A));
a = (A)xz2.Deserialize(reader);
Console.WriteLine(a.Name.CDataValue);
}
}
}
}

XmlReader在序列化中的使用的更多相关文章

  1. WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用

    原文:WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用 [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经> ...

  2. 【.net 深呼吸】序列化中的“引用保留”

    假设 K 类中有两个属性/字段的类型相同,并且它们引用的是同一个对象实例,在序列化的默认处理中,会为每个引用单独生成数据. 看看下面两个类. [DataContract] public class 帅 ...

  3. 【.net 深呼吸】设置序列化中的最大数据量

    欢迎收看本期的<老周吹牛>节目,由于剧组严重缺钱,故本节目无视频无声音.好,先看下面一个类声明. [DataContract] public class DemoObject { [Dat ...

  4. Java序列化中的SerialVersionUid

    版权声明:本文为博主fbysss原创文章,转载请注明出处 作者:fbysssmsn:jameslastchina@hotmail.com  blog:blog.csdn.NET/fbysss声明:本文 ...

  5. Java序列化中的serialVersionUID有什么用?

    如果一个实现了Serializable的类没有serialVersionUID属性,IDE(比如Eclipse)通常会报这样一个warning: The serializable class Foo ...

  6. 2017.12.22 Java序列化中你不知道的事(一)

    Java 序列化简介 Java 对象序列化是 JDK 1.1 中引入的一组开创性特性之一,用于作为一种将 Java 对象的状态转换为字节数组,以便存储或传输的机制,以后,仍可以将字节数组转换回 Jav ...

  7. 理解Java序列化中的SerialVersionUid

    一.前言 SerialVersionUid,简言之,其目的是序列化对象版本控制,有关各版本反序列化时是否兼容.如果在新版本中这个值修改了,新版本就不兼容旧版本,反序列化时会抛出InvalidClass ...

  8. XCTF-反序列化中_wakeup()函数

    跳过_wakeup()魔法函数__wakeup(): 将在序列化之后立即被调用漏洞原理: 当反序列化字符串中,表示属性个数的值大于其真实值,则跳过__wakeup()执行 对于该题,先可以看到类xct ...

  9. 关于java序列化中的一个细节

    java序列化机制的可以参考很多资料了,最近在看的时候发现了一些问题. 1. 默认的序列化机制,很多书里讲到序列化类只序列化类名,实例变量,不会实例化类变量(static)和瞬态变量(transien ...

随机推荐

  1. [转载]uml 类图依赖与关联的区别

    原文链接:https://www.cnblogs.com/liuzhang/archive/2013/03/17/2964095.html 最近研究设计模式,看类图有点发虚!有些关系搞的不是很清楚.所 ...

  2. Intel GPA果然是神器

    又一次PERF暗黑三...只有GPA帮到了我. Intel GPA是一个用于测试产品性能和质量的工具.使用这个工具可以运行在游戏或3D应用程序中用来看看它们是如何工作的,其优势性的一点是,有了Auto ...

  3. [LeetCode 题解]: Roman to Interger

    前言   [LeetCode 题解]系列传送门:  http://www.cnblogs.com/double-win/category/573499.html   1.题目描述 Given a ro ...

  4. 使用bmfont制作字体

    本地显示正常 将制作好的字体上传 别人用不好使 制作完场景没ctrl+s 保存 ctrl+s保存之后生成另外的文件

  5. Webbench的使用

    Webbench是一个在linux下使用的非常简单的网站压测工具. 它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力 ...

  6. ML.NET 0.9 版本发布---.net下的机器学习引擎

    欢迎来到 2019年!在过去的9个月里, 我们一直在为ML.NET添加新的特征和改进相关功能.在提交1.0版本之前,我们将专注于包的整体稳定性并对API进行不断优化, 扩大测试的覆盖面并对开发文档进行 ...

  7. select2 模糊查询远程数据

    详细:http://www.cnblogs.com/linJie1930906722/p/6060370.html $("#name").select2({ language: & ...

  8. 如何在VMware Workstation11的Windows Server 2008 R2中安装XAMPP?

    我在VMware Workstation11的Windows Server 2008 R2打算安装XAMPP,但是总是有问题,经过两天的不懈努力,终于实现了,下面我具体说一说我遇到的问题和解决方法! ...

  9. 为什么程序员都不喜欢使用switch而使用if来做条件跳转

    请用5秒钟的时间查看下面的代码是否存在bug.   OK,熟练的程序猿应该已经发现Bug所在了,在第8行和第10行下面我没有添加关键字break; 这就导致这段代码的行为逻辑与我的设计初衷不符了. 缺 ...

  10. Linux 下 Wordpress "Not Found" 解决

    无题.仅仅记录解决过程: 原因是WEB目录下的.htaccess文件需要开启伪静态才能将文件重定向到其他地方.