国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

XmlReader在序列化中的使用

2019-11-14 16:11:46
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

xmlDocument最大的不同——XmlReader逐行讀取。單獨(dú)很少使用,一般配合序列化(反序列化)使用,以下給出具體例子:

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)        {            //當(dāng)前讀到此處的時(shí)候,            //就是CData整個(gè)字符串<Name><![CData....]></Name>一堆東西            //因此Read先讀取Name,然后直接用Value獲取內(nèi)部的XmlCData的真實(shí)數(shù)據(jù)            if (reader.Read())            {                cDataValue = reader.Value;            }        }        public void WriteXml(XmlWriter writer)        {            //把當(dāng)前的數(shù)據(jù)轉(zhuǎn)換成CDataSection寫(xiě)入            writer.WriteCData(cDataValue);        }        #endregion    }    // 把A改成Root    [XmlRoot(ElementName = "Root")]    public class A    {        public int Id { get; set; }        //強(qiáng)制指定自定義的格式化方式        [XmlElement("Name", typeof(CData))]        public CData Name { get; set; }    }    public class Program    {        static void Main(string[] args)        {            StringBuilder sbu = new StringBuilder();                        //設(shè)置表頭(設(shè)置編碼格式和子Element的縮進(jìn)符號(hào))            XmlWriterSettings setting = new XmlWriterSettings();            setting.Indent = true;            setting.IndentChars = "/t";            setting.NewLineChars = "/r/n";            //必須用這種方式指定UTF-8輸出格式,否則前面會(huì)加BOM,            //另外注意,其實(shí)現(xiàn)在編碼仍然是UTF-16,那是因?yàn)闆](méi)有用Stream類(lèi)            //而是用StringBuilder,StringBuilder默認(rèn)覆蓋了Stream的UTF-8編碼            //強(qiáng)制使用UTF-16導(dǎo)致(具體參考: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);            }        }    }}

 


上一篇:.Net泛型約束

下一篇:[C#]ASCIIHelper

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 罗田县| 隆德县| 永德县| 河南省| 无极县| 开鲁县| 佛坪县| 清涧县| 枣强县| 汝阳县| 正安县| 彭泽县| 杨浦区| 龙南县| 开封县| 吉木乃县| 奉化市| 万全县| 平昌县| 波密县| 瑞丽市| 深圳市| 山阳县| 苍梧县| 屯昌县| 新源县| 瑞安市| 北辰区| 盐亭县| 咸丰县| 哈巴河县| 宜章县| 芮城县| 庆元县| 河北区| 砀山县| 枝江市| 肃宁县| 临高县| 阿坝| 监利县|