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 ...
随机推荐
- logback使用配置
一:logback.xml配置内容如下 <?xml version="1.0" encoding="UTF-8"?> <!-- Copyrig ...
- selenium定时签到程序
selenium定时签到程序 定时任务 # -*- coding: utf-8 -*- import time import os import sched import datetime from ...
- WPF:window设置单一开启
方法一: Window window = new Window();window.ShowDialog; 方法二: 设置一个判断窗口打开状态的全局控制变量 private bool i ...
- 洛谷P3572题解
这道题实在是一道 毒瘤 题,太坑爹了.那个写 \(deque\) 的题解亲测只有80分,原因 不言而明 ,这道题居然 丧心病狂 到 卡STL . 好了,不吐槽了,进入正题 题目分析: 这是一道十分 简 ...
- idea 新建不了servlet文件 方法(1)
在pem.xml中添加较新版本的servletapi包 <dependency> <groupId>javax.servlet</groupId> <arti ...
- JSP前端数据本地排序
在前端中我们经常需要数据的排序,首先写引入我写好的js $(function($) { $('#sclazzId').val($('#voId').val()); document.getElemen ...
- 记一次解决tomcat自动关闭的bug
最近一个运行了4年的javaee web项目,经常接到客户反馈系统无法打开.登录服务器查看服务,发现是tomcat自动关闭了.基本是3到4天发生一次. 运维人员开始以为是其他服务杀死了tomcat服务 ...
- PKI机制总结
PKI,全称是Public Key Infrastructure,可译为公钥基础设施.它是因特网中节点通信的安全保障机制,HTTPS中的‘S’就来源于PKI. 要去学习一个技术,首先要从它的源头考虑— ...
- ASP.NET Core MVC 之依赖注入 Controller
ASP.NET Core MVC 控制器应通过构造函数明确地请求它们地依赖关系,在某些情况下,单个控制器地操作可能需要一个服务,在控制器级别上的请求可能没有意义.在这种情况下,也可以将服务作为 Ac ...
- pickle 基础用法
def save_obj_to_file(path, target_obj): file = open(path,'wb') pickle.dump(target_obj) file.close() ...