和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. Rose如何由模型生成代码(正向工程)

    原创 正向工程: 选中要转换的模型. 单击 tools>Java/J2EE > Syntax Check 来检查目标代码是否符合规范,比如命名错误. 察看rose log窗口(下方)察看检 ...

  2. ViewResolver 视图解析器

    pringMVC 视图解析器 前言 在前一篇博客中讲了 SpringMVC 的Controller 控制器,在这篇博客中将接着介绍一下 SpringMVC 视图解析器.当我们对SpringMVC控制的 ...

  3. CentOS下安装PHP的AMQP扩展方法和步骤

    AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计.基于此协议的客户端 ...

  4. delphi将工程文件转成dll

    1.点击[File]—>[New]—>[Other]菜单项,打开[New Items],选择[New]: 2.选择[Dll Wizard]选项卡,点击ok,DLL工程创建成功. 3.点击[ ...

  5. 一个简单的C#+arcgis的非数据库版例子

    1.首先新建一个winform的项目. 2.确保C#工具箱包含ESRI的相关控件,如果没有就需要安装SDK. 如果VS中依旧不存在esri控件解决方案如下,以VS2013为例: (1)打开注册表,定位 ...

  6. Decoding VOX Files in C# (Converting VOX Files to WAV Files)

    I wrote a C# class to decode VOX files into WAV files. It follows the Dialogic ADPCM specificationst ...

  7. 用Docker自动构建纸壳CMS

    纸壳CMS可以运行在Docker上,接下来看看如何自动构建纸壳CMS的Docker Image.我们希望的是在代码提交到GitHub以后,容器镜像服务可以自动构建Docker Image,构建好以后, ...

  8. Spring各个jar包详解

    Spring各jar包详解 spring.jar 是包含有完整发布模块的单个jar 包.但是不包括mock.jar,aspects.jar, spring-portlet.jar, and sprin ...

  9. 网易对象存储NOS图床神器

    本文来自网易云社区 注:使用过程中有什么问题或建议欢迎到如下链接提交:http://note.youdao.com/noteshare?id=6321086fa4d7a6c003656354c1aa6 ...

  10. 【QTP专题-优化】VBS脚本启动QTP并运行测试

    使用vbs脚本启动QTP并运行测试,startQTP.vbs '******************************************************************** ...