XML序列化CDATA
不可避免的遇到对接需要使用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的更多相关文章
- 基于.net core封装的xml序列化,反序列化操作
需求: 由于在.net core中去除了Xml序列化XmlSerializer操作类.因此,在于一此数据传输当中出,需要用到对xml格式字符串的处理问题.因此封装了一个xml序列化与反序列化操作的类库 ...
- XML序列化与反序列化接口对接实战,看这篇就够了
关键字:c# .NET XML 序列化 反序列化 本文为接口对接实践经验分享,不对具体的XML概念定义进行阐述:涉及工具类及处理方法已在生产环境使用多年,可放心使用.当然如果你发现问题,或有不同想法, ...
- [.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类
[.net 面向对象程序设计进阶] (11) 序列化(Serialization)(三) 通过接口 IXmlSerializable 实现XML序列化 及 通用XML类 本节导读:本节主要介绍通过序列 ...
- .NET中XML序列化的总结
[题外话] 以前虽然常用.NET中的序列化,但是常用的BinaryFormatter,也就是二进制文件的序列化,却鲜用XML的序列化.对于XML序列化,.NET中同样提供了一个非常方便的工具XmlSe ...
- XML序列化和反序列化
上篇总结了下JSON的序列化和反序列化,博园中大牛给了很多牛叉的评论,学习了不少. 不过在上篇中忘了把json序列化和反序列化的另外一种方式写上去了,这里做个简单的补充: Json篇:http://w ...
- XML 序列化与反序列化
XML序列化与反序列化 1.将一个类转化为XML文件 /// <summary> /// 对象序列化成XML文件 /// </summary> /// <param na ...
- 关于XML序列化与CultureInfo
不同的计算机系统可能有着不同的CultureInfo,例如在中文环境下日期通常这样显示03/30/2016,而在有的操作系统下它可能是这样的30.3.2016. 这样的话带来一个问题,例如在中文环境下 ...
- XmlSerializer 对象的Xml序列化和反序列化
http://www.cnblogs.com/yukaizhao/archive/2011/07/22/xml-serialization.html 这篇随笔对应的.Net命名空间是System.Xm ...
- C#的XML序列化及反序列化
webservice在工作中用到的很多,基本都是以XML格式问通讯内容,其中最关键的就是XML串的序列化及反序列化. XML的运用中有两种信息传递,一种为XML的请求信息,另一种为返回信息,要运用XM ...
随机推荐
- 已知词频生成词云图(数据库到生成词云)--generate_from_frequencies(WordCloud)
词云图是根据词出现的频率生成词云,词的字体大小表现了其频率大小. 写在前面: 用wc.generate(text)直接生成词频的方法使用很多,所以不再赘述. 但是对于根据generate_from_f ...
- C#实现简单爬虫
分享之前写过的一个爬虫,采集数据,存入数据库的简单实现. github地址:https://github.com/CodesCreator/biu-biu-biu-
- java-极光推送教程
一.准备工作: 1.访问极光推送官网:https://www.jiguang.cn/accounts/login/form 2.注册登陆,拿到appKey和masterSecret 3.创建一个应用, ...
- Vue系列:wangEditor富文本编辑器简单例子
考虑到该富文本编辑器可能会在后续项目中继续使用,因此单独将其做成一个组件,把wangeditor作为组件的形式使用. 以下是参考代码 子组件部分: 父组件引用子组件: 以上就是 wangEditor ...
- Spark 系列(十一)—— Spark SQL 聚合函数 Aggregations
一.简单聚合 1.1 数据准备 // 需要导入 spark sql 内置的函数包 import org.apache.spark.sql.functions._ val spark = SparkSe ...
- Rootkit与后门隐藏技术
目录 简介 linux虚拟文件系统VFS rootkit的功能 隐藏文件 基本方法 高级方法 系统调用流程 hook sys_getdents sys_getdents的调用树 最底层的方法 隐藏进程 ...
- react父组件调用子组件中方法
- 为什么选择B+树作为数据库索引结构?
背景 首先,来谈谈B树.为什么要使用B树?我们需要明白以下两个事实: [事实1] 不同容量的存储器,访问速度差异悬殊.以磁盘和内存为例,访问磁盘的时间大概是ms级的,访问内存的时间大概是ns级的.有个 ...
- linux系统磁盘满了,怎么解决?
1.使用命令:df -lk 或 df -hl 发现果然有个磁盘已满 2.使用命令:du --max-depth=1 -h 查找大文件,发现/home文件夹下有17G的东西,因为我的apache是装在 ...
- 如何用Python实现敏感词的过滤
题目要求如下: 从文件解析敏感词,从终端获取用户输入.根据敏感词对用户输入进行过滤.这里过滤需要考虑不止一个过滤词:即将读取的所有过滤词,放进一个列表,用屏蔽词检索用户输入,如果有屏蔽词,则将其替换为 ...