public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }        
}
引用内容
<?xml version="1.0"?>
<Person xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Name>dnawo</Name>
  <Age>100</Age>
</Person>

例2

public class Person
{
    public XmlNode Name { get; set; } //XmlNodeType.CDATA
    public XmlNode Age { get; set; } //XmlNodeType.Text
}
引用内容
<?xml version="1.0"?>
<Person xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Name><![CDATA[dnawo]]></Name>
  <Age>100</Age>
</Person>

例1的实体类我们比较常用,赋值取值方便,但序列化时不能生成CDATA节点,例2的实体类序列化时可以生成CDATA节点,但使用不方便,于是将两个例子优点做了下结合:

using System;
using System.IO;
using System.Text;
using System.Xml;
using System.Xml.Serialization;

namespace ConsoleApplication1
{
    public partial class Person
    {
        [XmlIgnore]
        public string Name { get; set; }

[XmlIgnore]
        public int Age { get; set; }        
    }

public partial class Person
    {
        [XmlElement("Name")]
        public XmlNode aaa
        {
            get
            {
                XmlNode node = new XmlDocument().CreateNode(XmlNodeType.CDATA, "", "");
                node.InnerText = Name;
                return node;
            }
            set { } //省略则aaa不会被序列化
        }
        [XmlElement("Age")]
        public XmlNode bbb
        {
            get
            {
                XmlNode node = new XmlDocument().CreateNode(XmlNodeType.Text, "", "");
                node.InnerText = Age.ToString();
                return node;
            }
            set { } //省略则bbb不会被序列化
        }
    }

class Program
    {
        static void Main(string[] args)
        {
            string result = string.Empty;
            Person person = new Person() { Name = "dnawo", Age = 100 };
            using (MemoryStream output = new MemoryStream())
            {
                XmlSerializer serializer = new XmlSerializer(person.GetType());
                serializer.Serialize(output, person);
                result = Encoding.UTF8.GetString(output.ToArray());
            }
            Console.WriteLine(result);

Console.ReadKey();
        }
    }
}

引用内容
<?xml version="1.0"?>
<Person xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Name><![CDATA[dnawo]]></Name>
  <Age>100</Age>
</Person>

常见问题

问:为什么例2实体类属性类型不直接用XmlCDataSection、XmlText?
答:用XmlCDataSection没问题,而XmlText序列化时会失败,提示反射类型“System.Xml.XmlText”出错。

参考资料

[1].使用 XmlSerializer 控制序列化生成 CDATA 内容:http://blog.csdn.net/hwj383/article/details/5780962

C#调用XmlSerializer序列化时生成CDATA节点解决方法的更多相关文章

  1. 关于php读mysql数据库时出现乱码的解决方法

    关于php读mysql数据库时出现乱码的解决方法 php读mysql时,有以下几个地方涉及到了字符集. 1.建立数据库表时指定数据库表的字符集.例如 create table tablename ( ...

  2. (转)调用System.gc没有立即执行的解决方法

    调用System.gc没有立即执行的解决方法 查看源码 当我们调用System.gc()的时候,其实并不会马上进行垃圾回收,甚至不一定会执行垃圾回收,查看系统源码可以看到 /** * Indicate ...

  3. linux上备份Oracle时EXP-00091的错误解决方法

    unix/linux上备份Oracle时EXP-00091的错误解决方法 unix/linux上备份数据时的错误解决方法 EXP-00091: Exporting questionable stati ...

  4. PL/SQL Developer 使用中文条件查询时无数据的解决方法(转)

    原文地址: PL/SQL Developer 使用中文条件查询时无数据的解决方法 PL/SQL Developer 使用中文条件查询时无数据,这是由于字符集的不一致导致的. 执行以下sql命令:sel ...

  5. 调用libpci库出现的问题和解决方法

    调用libpci库出现的问题和解决方法   本方案以pciutils-3.5.1为例.   1. 从以下地址下载pciutils-3.5.1.tar.xz https://www.kernel.org ...

  6. WPF拖动DataGrid滚动条时内容混乱的解决方法

    WPF拖动DataGrid滚动条时内容混乱的解决方法 在WPF中,如果DataGrid里使用了模板列,当拖动滚动条时,往往会出现列表内容显示混乱的情况.解决方法就是在Binding的时候给Update ...

  7. Android开发环境搭建时遇到问题的解决方法

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/linux_loajie/article/details/33823637 Android开发环境搭建 ...

  8. 关于python3 使用pycharm+unittest+html+HTMLTestRunner 测试用例运行正常,但却不能生成测试报告的解决方法

    关于python3 使用pycharm+unittest+html+HTMLTestRunner 测试用例运行正常,但却不能生成测试报告的解决方法 这个问题我也遇到过,以下是解决办法   该方法适用于 ...

  9. 弹出USB大容量存储设备时出问题的解决方法

    我的计算机->管理->系统工具->事件查看器->自定义视图->Kernel-Pnp->详情->进程ID 然后在任务管理器里找到该进程(任务管理器->查看 ...

随机推荐

  1. linux性能分析工具集(图示)

  2. JavaScript中一个对象如何继承另外一个对象

    如题,JavaScript中一个对象a如何继承另外一个对象b.即将b中的属性和方法复制到a中去. 面试中遇到了这个问题,当时脑子里的想法是: 1.除了循环遍历复制,还能怎样 2.javascript中 ...

  3. 解决webstorm本地IP访问页面出错的问题,webstorm支持IP访问

    想在手机端访问webstorm做出的页面,遇到了根据IP地址访问页面错误的问题,试了网上的方法:“设置webstorm可以被外部连接访问”,依旧不能解决 解决方法: 在webstorm下:ctrl+a ...

  4. maven 打包以及上传

    插件 ------------------------------------------------------------------------------------------------- ...

  5. Install SVN (Subversion) Server on Fedora 20/19, CentOS/Red Hat (RHEL) 6.5/5.10

    Install SVN (Subversion) Server on Fedora 20/19, CentOS/Red Hat (RHEL) 6.5/5.10 Updated by JR on Mar ...

  6. Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC

    在之前的<跟我学SpringMVC>中的<第七章 注解式控制器的数据验证.类型转换及格式化>中已经介绍过SpringMVC集成Bean Validation 1.0(JSR-3 ...

  7. C#.NET常见问题(FAQ)-如何使用右下角托盘图标notifyIcon

    1 拖放一个NotifyIcon控件,并设置图标,还有显示的文字   2 双击这个控件,即当最小化了主窗体,然后双击这个右下角图标的时候,要显示主窗体(大部分程序的用户体验都是这样干的,比如QQ,双击 ...

  8. Python脚本生成sitemap

    项目须要用脚本生成sitemap,中间学习了一下sitemap的格式和lxml库的使用方法.把结果记录一下,方便以后须要直接拿来用. 来自Python脚本生成sitemap 安装lxml 首先须要pi ...

  9. C++中引用传递与指针传递的区别

    最近Garena面试的过程中,面试官提了一个问题,C++中引用传递和指针传递的区别? 根据自己的经验,联想到了swap函数,只知道既可以用引用来实现,又可以用指针传递来实现,至于二者有何区别,自己还真 ...

  10. Go语言中使用SQLite数据库

    Go语言中使用SQLite数据库 1.驱动 Go支持sqlite的驱动也比较多,但是好多都是不支持database/sql接口的 https://github.com/mattn/go-sqlite3 ...