和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. 第六周—Alpha阶段项目复审(五饭来了吗)

    第六周--Alpha阶段项目复审(五饭来了吗) 以下部分排名只是个人观点: 小组 优点 缺点,bug报告 名次 中午吃啥队 较完整的团体结构,可提供给商家和用户 感觉界面再优化一下就很棒了 1 天冷记 ...

  2. [Erlang00]:gen_server:reply/2

    --- gen_server:reply/2 reply(Client, Reply) –> Result      Types:     Client - see below     Repl ...

  3. 基于GOJS绘制流程图

    基于GOJS封装的流程图设计(展示)工具类,主要分为两个工具类: 工具库依赖于go.js.jquery以及layer.js http://gojs.net/ http://jquery.com/ ht ...

  4. UML uml建模工具

    UML建模工具 一.UML的概念: 参考百度百科: https://baike.baidu.com/item/%E7%BB%9F%E4%B8%80%E5%BB%BA%E6%A8%A1%E8%AF%AD ...

  5. [Perl][文件操作]判断文件是否为符号链接(Unicode路径)

    Win32API::File 判断文件/文件夹是否为符号链接 Win32::Unicode 好像无法做这方面的判断,只能判断是否为目录.文件.文件是否存在. Win32API::File 则支持 Ge ...

  6. Django-03视图层

    5.1 视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片 ...

  7. 514. Freedom Trail

    In the video game Fallout 4, the quest "Road to Freedom" requires players to reach a metal ...

  8. KVM虚拟机的日常管理与配置

    1. 查看KVM虚拟机配置文件及运行状态(1) KVM虚拟机默认配置文件位置: /etc/libvirt/qemu/ autostart目录是配置kvm虚拟机开机自启动目录. (2) virsh命令帮 ...

  9. 16、xtrabackup 增量备份及恢复

    备份命令如下 备份命令如下 全量备份 #  innobackupex -p123123 /backup # ls /backup 2017-04-08_13-36-11 增量备份或差量备份 # inn ...

  10. [ActionScript 3.0] 利用ColorTransform实现对象(图片)的曝光过渡效果

    原图效果 过渡效果 这个效果可以用帧动画实现较为简单,只需要调节这个影片剪辑的色彩效果样式里面的高级选项的三个通道值,以下用代码简单测试,可作为文档类: package { import com.tw ...