和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. vmware中安装centos 6.7

    centos 6.7 软件下载地址:http://b.mirrors.lanunion.org/CentOS/6.7/isos/i386/ 引用:http://www.cnblogs.com/sees ...

  2. CSS选择器与jQuery选择器的异同:一些特殊的选择器

    在CSS3选择器标淮草案定义的选择器语法中,jQuery支持相当完整的一套子集,同时还添加了一些非标准但很有用的伪类.下面是一些jQuery扩展的选择器:(来自http://www.cnblogs.c ...

  3. IIS 7.5 使用appliaction Initialization

    https://blogs.msdn.microsoft.com/amol/2013/01/25/application-initialization-ui-for-iis-7-5/ 待续 正在测试 ...

  4. [Erlang04]为什么有了rpc还有net_kernel:connect/1?

    问题描述: RPC(Remote Procedure Call)远程程序调用: 如果要给另一个节点发信息:可以简单写成: call(Msg,Node) -> {server,Node}!{sel ...

  5. mysql 循环插入

    在mysql添加测试数据,想和mssql一样用循环实现,发现不管怎么样都执行失败 经查询发现mysql不支持匿名块,只能先创建出一个存储过程,执行,然后删除 CREATE PROCEDURE test ...

  6. python学习之路 四 :文件处理

    本节重点 掌握文件的读.写.修改方法 掌握文件的处理模式的区别 一.文件读取 ​    ​1.读取全部内容 # 一次性读取文件 f = open("test.txt",'r',en ...

  7. OI题目类型总结整理

    ## 本蒟蒻的小整理qwq--持续更新(咕咕咕) 数据结构 数据结构 知识点梳理 数据结构--线段树 推荐yyb dalao的总结--戳我 以后维护线段树还是把l,r写到struct里面吧,也别写le ...

  8. eclipse问题 - windows版

    问题:java compiler level does not match the version of the installed java project facet:但是项目仍能运行 解释:项目 ...

  9. adb命令之pm

    常用的用法: 查看已经安装的包 pm list packages 查看已经安装的包以及apk路径(-3:只看第三方应用: -s:只看系统应用) -f: see their associated fil ...

  10. 正则表达式,sed简单用法

      一. 正则表达式 1. 常见的正则表达式字符 [] 匹配字符集 grep "bl[lo]g" oldboy.txt 表示字符‘l’或者‘o’都可匹配 * 重复前面字符任意次 g ...