博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XML序列化CDATA
阅读量:5364 次
发布时间:2019-06-15

本文共 2950 字,大约阅读时间需要 9 分钟。

不可避免的遇到对接需要使用XML文档的第三方系统,某些节点内容特殊,序列化时需特殊处理,解决方案是实现IXmlSerializable接口。

///     /// Person    ///     public class Person : IXmlSerializable    {        ///         /// PersonId        ///         public int PersonId { get; set; }        ///         /// PersonName        ///         public string PersonName { get; set; }        ///         /// Birthday        ///         public DateTime? Birthday { get; set; }        ///         /// Age        ///         public int Age { get; set; }        ///         /// Remarks        ///         public string Remarks { get; set; }        public XmlSchema GetSchema()        {            return default(XmlSchema);        }        public void ReadXml(XmlReader reader)        {            reader.ReadStartElement("Person");            this.PersonId = reader.ReadElementContentAsInt("PersonId","");            this.PersonName = reader.ReadElementContentAsString("PersonName","");            this.Birthday = reader.ReadElementContentAsDateTime("Birthday", "");            this.Age = reader.ReadElementContentAsInt("Age", "");            this.Remarks = reader.ReadElementContentAsString("Remarks", "");        }        public void WriteXml(XmlWriter writer)        {            writer.WriteStartElement(nameof(this.PersonId));            writer.WriteValue(this.PersonId);            writer.WriteEndElement();            writer.WriteStartElement(nameof(this.PersonName));            writer.WriteCData(this.PersonName);            writer.WriteEndElement();            writer.WriteStartElement(nameof(this.Birthday));            writer.WriteValue(this.Birthday);            writer.WriteEndElement();            writer.WriteStartElement(nameof(this.Age));            writer.WriteValue(this.Age);            writer.WriteEndElement();            writer.WriteStartElement(nameof(this.Remarks));            writer.WriteCData(this.Remarks);            writer.WriteEndElement();            }    }

序列化:

       XmlSerializer serializer = new XmlSerializer(typeof(Person));            Person person = new Person();            person.PersonId = 1;            person.PersonName = chinesenames[0];            person.Birthday = RandomUtils.RandomDateTime(DateTime.Now.AddYears(-40), DateTime.Now);            person.Age = DateTime.Now.Year - person.Birthday.GetValueOrDefault().Year;            person.Remarks = "https://blog.csdn.net/shuliuzh/article/details/49426711";            using(MemoryStream writer=new MemoryStream())            {                serializer.Serialize(writer, person);               string xml= Encoding.UTF8.GetString(writer.GetBuffer());                Console.WriteLine(xml);                File.WriteAllText("person.xml", xml, Encoding.UTF8);            }

结果:

1
1985-05-24T00:00:00
33

 

转载于:https://www.cnblogs.com/shya/p/8902850.html

你可能感兴趣的文章
关于python中带下划线的变量和函数 的意义
查看>>
linux清空日志文件内容 (转)
查看>>
Ajax : load()
查看>>
MySQL-EXPLAIN执行计划Extra解释
查看>>
图片点击轮播(三)-----2017-04-05
查看>>
直播技术细节3
查看>>
《分布式服务架构:原理、设计于实战》总结
查看>>
java中new一个对象和对象=null有什么区别
查看>>
字母和数字键的键码值(keyCode)
查看>>
IE8调用window.open导出EXCEL文件题目
查看>>
01_1_准备ibatis环境
查看>>
JavaScript中的BOM和DOM
查看>>
360浏览器兼容模式 不能$.post (不是a 连接 onclick的问题!!)
查看>>
spring注入Properties
查看>>
jmeter(五)创建web测试计划
查看>>
1305: [CQOI2009]dance跳舞 - BZOJ
查看>>
将html代码中的大写标签转换成小写标签
查看>>
jmeter多线程组间的参数传递
查看>>
零散笔记
查看>>
信息浏览器从Android的浏览器中传递cookie数据到App中信息浏览器
查看>>