XmlReader在序列化中的使用
2018-06-18 02:56:57来源:未知 阅读 ()
和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
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- C语言中的宏定义 2020-04-04
- c++中的多态机制 2020-04-04
- Window中的shellcode编写框架(入门篇) 2020-03-31
- C++ 类中的函数重载 2020-03-24
- c++中的异常处理 2020-03-21
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