XmlReader在序列化中的使用
2018-06-17 20:18:22来源:未知 阅读 ()
和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 = 1, 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); } } } }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 团队开发中的 Git 实践 2019-09-30
- PHP中的这些坑,你没踩过算你厉害 2019-09-23
- 用redis实现电商项目中的秒杀商品功能 2019-08-26
- Redis在Laravel项目中的应用实例详解 2019-08-23
- mysql读写分离在项目实践中的应用,干货 2019-08-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash