和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. delphi edit边框成为下划线

    设置它的几个属性:BevelEdges    |_ beLeft = False;    |_ beTop   = False;    |_ beRight = False;    |_ beBott ...

  2. Linq分区操作之Skip,SkipWhile,Take,TakeWhile源码分析

    Linq分区操作之Skip,SkipWhile,Take,TakeWhile源码分析 二:linq的分区操作 常用的分区操作:Take,TakeWhile,Skip,SkipWhile 三:Take ...

  3. TDE--相关Demo

    SQL Server 2008引入透明数据加密(Transparent Data Encryption),它允许你完全无需修改应用程序代码而对整个数据库加密.当一个用户数据库可用且已启用TDE时,在写 ...

  4. MAVEN 编译打包时报“找不到符号”cannot find symbol 的处理方法总结

    http://www.cnblogs.com/Starshot/p/7441075.html

  5. solr的schema.xml配置属性解释

    schema.xml做什么? SOLR加载数据,创建索引和数据时,核心数据结构的配置文件是schema.xml,该配置文件主要用于配置数据源,字段类型定义,搜索类型定义等.schema.xml的配置直 ...

  6. day13学python 协程+事件驱动

    协程+事件驱动 协程 (微线程)--用处多,重点 当调度切换时 靠寄存器上下文和栈保存 要使用时再调用(即可不会因io传输数据卡壳 从而耗时无法继续进行)实现并行 优缺点: 优点: 1 无需同线程上下 ...

  7. Major compaction时的scan操作

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u014393917/article/details/24419355 Major compactio ...

  8. iOS 发送位置消息

    发送地理位置在社交应用里面是很常用的需求.最近也需要在自己的应用里面加入这个功能 首先我们需要获取自己的地理位置,这里用到 CLLocationManager 这个类,调用如下代码 locationM ...

  9. SpringMVC 的初理解

    项目中用到了jetty,springboot两种构建服务器的方式,jetty是一种嵌入式的方式,部署启动都很灵活,springboot最大的优点就是很多配置文件都自己集成好了,虽然用了这么多好的框架, ...

  10. windows 安装python问题总结

    一.安装支持包 很多二进制包 NumPy-1.9+MKL 以及 Microsoft Visual C++ 2008 (x64, x86, and SP1 for CPython 2.6 and 2.7 ...