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

/// <summary>
/// Person
/// </summary>
public class Person : IXmlSerializable
{
/// <summary>
/// PersonId
/// </summary>
public int PersonId { get; set; }
/// <summary>
/// PersonName
/// </summary>
public string PersonName { get; set; }
/// <summary>
/// Birthday
/// </summary>
public DateTime? Birthday { get; set; }
/// <summary>
/// Age
/// </summary>
public int Age { get; set; }
/// <summary>
/// Remarks
/// </summary>
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 = ;
person.PersonName = chinesenames[];
person.Birthday = RandomUtils.RandomDateTime(DateTime.Now.AddYears(-), 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);
}

结果:

<?xml version="1.0"?>
<Person>
<PersonId>1</PersonId>
<PersonName><![CDATA[闾丘寇态]]></PersonName>
<Birthday>1985-05-24T00:00:00</Birthday>
<Age>33</Age>
<Remarks><![CDATA[https://blog.csdn.net/shuliuzh/article/details/49426711]]></Remarks>
</Person>

XML序列化CDATA的更多相关文章

  1. 基于.net core封装的xml序列化,反序列化操作

    需求: 由于在.net core中去除了Xml序列化XmlSerializer操作类.因此,在于一此数据传输当中出,需要用到对xml格式字符串的处理问题.因此封装了一个xml序列化与反序列化操作的类库 ...

  2. XML序列化与反序列化接口对接实战,看这篇就够了

    关键字:c# .NET XML 序列化 反序列化 本文为接口对接实践经验分享,不对具体的XML概念定义进行阐述:涉及工具类及处理方法已在生产环境使用多年,可放心使用.当然如果你发现问题,或有不同想法, ...

  3. [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类

    [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类 本节导读:本节主要介绍通过序列 ...

  4. .NET中XML序列化的总结

    [题外话] 以前虽然常用.NET中的序列化,但是常用的BinaryFormatter,也就是二进制文件的序列化,却鲜用XML的序列化.对于XML序列化,.NET中同样提供了一个非常方便的工具XmlSe ...

  5. XML序列化和反序列化

    上篇总结了下JSON的序列化和反序列化,博园中大牛给了很多牛叉的评论,学习了不少. 不过在上篇中忘了把json序列化和反序列化的另外一种方式写上去了,这里做个简单的补充: Json篇:http://w ...

  6. XML 序列化与反序列化

    XML序列化与反序列化 1.将一个类转化为XML文件 /// <summary> /// 对象序列化成XML文件 /// </summary> /// <param na ...

  7. 关于XML序列化与CultureInfo

    不同的计算机系统可能有着不同的CultureInfo,例如在中文环境下日期通常这样显示03/30/2016,而在有的操作系统下它可能是这样的30.3.2016. 这样的话带来一个问题,例如在中文环境下 ...

  8. XmlSerializer 对象的Xml序列化和反序列化

    http://www.cnblogs.com/yukaizhao/archive/2011/07/22/xml-serialization.html 这篇随笔对应的.Net命名空间是System.Xm ...

  9. C#的XML序列化及反序列化

    webservice在工作中用到的很多,基本都是以XML格式问通讯内容,其中最关键的就是XML串的序列化及反序列化. XML的运用中有两种信息传递,一种为XML的请求信息,另一种为返回信息,要运用XM ...

随机推荐

  1. oracle 断电启动失败:ORA-00600: internal error code, arguments

    转载地址: http://www.2cto.com/database/201312/261602.html 由于服务器断电,启动 oracle 时报 ORA-00600 错误 查看 oracle tr ...

  2. SpringBoot-Admin的使用

    [**前情提要**]Spring Boot Actuator 提供了对单个 Spring Boot 应用的监控,信息包含应用状态.内存.线程.堆栈等,比较全面的监控了 Spring Boot 应用的整 ...

  3. 【CodeForces - 1200A】Hotelier(水题、模拟)

    Hotelier 直接翻译了 Descriptions Amugae的酒店由10人组成10客房.房间从0开始编号0到99 从左到右. 酒店有两个入口 - 一个来自左端,另一个来自右端.当顾客通过左入口 ...

  4. 浅谈osi模型 三次握手 四次挥手 ddos攻击原理

    C/S B/S 架构 C:client 端 B:browser 浏览器 S:server 端 C/S架构,基于客户端与服务端之间的通信 例如:QQ,抖音,快手,微信,支付宝等等 优点:个性化设置,响应 ...

  5. ES6中比较实用的几个特性

    1.Default Parameters(默认参数) in ES6 es6之前,定义默认参数的方法是在一个方法内部定义 var link = function (height, color, url) ...

  6. GOF23-单列模式

    1.什么是单例模式 一个类只有一个实列,并且提供一个对外访问该实例的全局访问点. 常见应用场景:数据库连接池,项目中读取配置文件的类,servlet也是单列,Spring中的Bean默认也是单列 2. ...

  7. exlipse php 插件安装地址

    以前的exlipse PHP插件老是有问题,下面这个地址可以使用. http://www.phpsrc.org/eclipse/pti/

  8. Springboot源码分析之项目结构

    Springboot源码分析之项目结构 摘要: 无论是从IDEA还是其他的SDS开发工具亦或是https://start.spring.io/ 进行解压,我们都会得到同样的一个pom.xml文件 4. ...

  9. git 技术栈

    之前用的都是svn ,git还是要了解的,万一哪天要用了呢

  10. SpringMVC源码分析6:SpringMVC的视图解析原理

    title: SpringMVC源码分析6:SpringMVC的视图解析原理 date: 2018-06-07 11:03:19 tags: - SpringMVC categories: - 后端 ...