XmlReader在序列化中的使用

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

和xmlDocument最大的不同——XmlReader逐行读取。单独很少使用,一般配合序列化(反序列化)使用,以下给出具体例子:

namespaceConsoleapplication1

{publicclassCData : IXmlSerializable

{PRivatestringcDataValue =null;publicstringCDataValue

{get{returncDataValue; }privateset{

cDataValue=value;

}

}publicCData()

{

}publicCData(stringdataValue)

{

cDataValue=dataValue;

}#regionIXmlSerializable MemberspublicSystem.Xml.Schema.XmlSchema GetSchema()

{returnnull;

}publicvoidReadXml(XmlReader reader)

{//当前读到此处的时候,//就是CData整个字符串<Name><![CData....]></Name>一堆东西//因此Read先读取Name,然后直接用Value获取内部的XmlCData的真实数据if(reader.Read())

{

cDataValue=reader.Value;

}

}publicvoidWriteXml(XmlWriter writer)

{//把当前的数据转换成CDataSection写入writer.WriteCData(cDataValue);

}#endregion}//把A改成Root[XmlRoot(ElementName ="Root")]publicclassA

{publicintId {get;set; }//强制指定自定义的格式化方式[XmlElement("Name",typeof(CData))]publicCData Name {get;set; }

}publicclassProgram

{staticvoidMain(string[] args)

{

StringBuilder sbu=newStringBuilder();//设置表头(设置编码格式和子Element的缩进符号)XmlWriterSettings setting =newXmlWriterSettings();

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 =newUTF8Encoding(false);using(varwriter =XmlWriter.Create(sbu, setting))

{

XmlSerializer xz=newXmlSerializer(typeof(A));//去除命名空间XmlSerializerNamespaces emptyNameSpace =newXmlSerializerNamespaces();

emptyNameSpace.Add(string.Empty,string.Empty);//序列化xz.Serialize(writer,newA { Id =1, Name =newCData("董玮") }, emptyNameSpace);

}

Console.WriteLine(sbu.ToString());//以下是反序列化StringReader sr =newStringReader(sbu.ToString());

XmlReaderSettings rset=newXmlReaderSettings();

rset.IgnoreWhitespace=true;using(varreader =XmlReader.Create(sr, rset))

{

A a=null;

XmlSerializer xz2=newXmlSerializer(typeof(A));

a=(A)xz2.Deserialize(reader);

Console.WriteLine(a.Name.CDataValue);

}

}

}

}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航