近段对XML 序列化进行处理,用XmlSerializer这个挺好用的。

但是对于派生类对象的XML的生成总会报错。因为同一个节点名称,不能反射为不同的对象。这个在网上找了好久,都说要利用反射来处理。

现在用XML的类似C++ 函数前置声明。 XmlInclude 来实现。

声明:新手新学,难免纰漏!

直接代码。

环境: Vs2008 C#

1. 建了一个新C# 控制台工程。

主要要添加引用

using System.Xml;
using System.Xml.Serialization;

2. 声明和定义XML的生成对象格式。

自己写了个FormatDefine.cs类,用来实现定义对象的格式。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
// Zhang Pengjuusing System.Xml;
using System.Xml.Serialization;
//
namespace SerializeTest
{public class StyleNote{[XmlText]public string StyleNoteNode { get; set; }}    [XmlInclude(typeof(PointStyle))][XmlInclude(typeof(LineStyle))]public class Style{[XmlAttribute("id")]public int id { get; set; }[XmlAttribute("type")]public string TypeNode { get; set; }// public string StyleType { get; set; }}// 线的STYLEpublic class LineStyle : Style{[XmlElement("Line")]public string LineNode { get; set; }[XmlElement("Count")]public int CountNode { get; set; }}// 点的STYLEpublic class PointStyle : Style{[XmlElement("Point")]public string PointNode { get; set; }}//public class Styles{[XmlElement(ElementName = "Style")]public List<Style> StyleListNode { get; set; }public Styles(){StyleListNode = new List<Style>();}}// 根节点[XmlRoot("root")]public class TestRoot{[XmlElement("Title")]public StyleNote rStyleNote;[XmlElement("Styles")]public Styles StylesSNode { get; set; }}
}

3. 调用和使用。

在Program.cs中测试。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;using System.Xml;
using System.Xml.Serialization;
using System.IO;namespace SerializeTest
{class Program{static void Main(string[] args){TestRoot oTestRoot = new TestRoot();// StyleNoteStyleNote oStyleNote = new StyleNote();oStyleNote.StyleNoteNode = "this is just a test";// 线LineStyle oLineStyle = new LineStyle();oLineStyle.id = 1;oLineStyle.StyleType = "StyleTypeLine";oLineStyle.TypeNode = "TypeNodeLine";oLineStyle.LineNode = "线节点";oLineStyle.CountNode = 10;// 点PointStyle oPointStyle = new PointStyle();oPointStyle.id = 2;oPointStyle.StyleType = "StyleTypePoint";oPointStyle.TypeNode = "TypeNodePoint";oPointStyle.PointNode = "点节点";//Styles oStyles = new Styles();oStyles.StyleListNode.Add(oPointStyle);oStyles.StyleListNode.Add(oLineStyle);// 添加到root中oTestRoot.rStyleNote = oStyleNote;oTestRoot.StylesSNode = oStyles;// 保存文件名称string oFileName = "C:\\my_Test.xml";System.Xml.Serialization.XmlSerializer serializer = null;System.IO.StreamWriter writer = null;try{   serializer = new System.Xml.Serialization.XmlSerializer(oTestRoot.GetType());FileStream fs = new FileStream(oFileName, FileMode.Create);serializer.Serialize(fs,oTestRoot);}catch (System.Exception ex){}finally{if (writer != null){writer.Close();}}}}
}

这样运行,基本搞定。

生成XML如下:

<?xml version="1.0"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><Title>this is just a test</Title><Styles><Style xsi:type="PointStyle" id="1" type="TypeNodePoint"><StyleType>StyleTypePoint</StyleType><Point>点节点</Point></Style><Style xsi:type="LineStyle" id="1" type="TypeNodeLine"><StyleType>StyleTypeLine</StyleType><Line>线节点</Line><Count>10</Count></Style></Styles>
</root>

至此,没有了。

欢迎留言,讨论!求进步!

留源码下载地址:http://download.csdn.net/detail/cartzhang/5591659

转载于:https://www.cnblogs.com/qitian1/p/6461993.html

C# 派生类的XmlSerializer序列化XML相关推荐

  1. android之XmlSerializer序列化XML(写入) android之XmlSerializer序列化XML(写入)...

    android之XmlSerializer序列化XML(写入) 分类:android_数据增删查改2011-03-03 11:497437人阅读评论(2)收藏举报 androidxmlstringen ...

  2. c语言xml序列化,C# XML和实体类之间相互转换(序列化和反序列化)

    我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlUtil类,该类来自网络并稍加修改. using System; using System.Collections.Ge ...

  3. XML和实体类之间相互转换(序列化和反序列化)

    我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlUtil类,该类来自网络并稍加修改. using System; using System.Collections.Ge ...

  4. c# XML和实体类之间相互转换(序列化和反序列化)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  5. (3)[wp7数据存储] WP7 IsolatedStorage系列篇——通过XmlSerializer读写XML文件 [复制链接]...

    发表于 2012-5-17 15:51:07 |只看该作者 |倒序浏览 分享到: 本帖最后由 agameboy 于 2012-5-17 17:08 编辑 这一篇我们会通过XmlSerializer读写 ...

  6. android xml对象,对象转成xml(并且序列化xml)在android中

    第一种 在本地生成AppuserManager.xml文件,并且把对象转成了xml格式 package com.example.hasee.myxml; import android.app.Acti ...

  7. 简单介绍实体类或对象序列化时,忽略为空属性的操作

    这篇文章主要介绍了实体类或对象序列化时,忽略为空属性的操作,具有很好的参考价值,希望对大家有所帮助.如有错误或未考虑完全的地方,望不吝赐教 第一种,在配置文件配置 在application.xml直接 ...

  8. 派生类参数初始化列表和基类构造函数顺序

    今天被问到了一个问题,随便回了一句,父类还没有构建,怎么能初始化父类的成员. 派生类构造函数的参数初始化列表,为什么不能初始化基类的成员? 例如下面的是不可以的 class Rectangle : p ...

  9. C++派生类与基类构造函数调用次序

    本文用来测试C++基类和派生类构造函数,析构函数,和拷贝构造函数的调用次序. 运行环境:SUSE Linux Enterprise Server 11 SP2  (x86_64) #include & ...

最新文章

  1. sqlalchemy数据库中的offset偏移查询的使用
  2. BUUCTF(misc)变异凯撒 --二
  3. jQuery库与其他JS库冲突的解决办法
  4. springBoot修改代码不需要重启-热部署
  5. mysql oracle 备份数据库备份_完整备份Oracle数据库
  6. 大华平台linux密码忘记,大华乐橙sn1(海思hi3798c)刷机
  7. idea 2018 破解教程
  8. 《缠中说禅108课》57:当下图解分析再示范
  9. js根据年份计算总周数并获取每周的日期范围
  10. 工作记录 --01 验证证件号合法性!
  11. 如何使用 Java 将 PDF 转换为文本 (TXT)
  12. 风变python培训班学费一般多少
  13. 爬虫实战—拿下最全租房数据 | 附源码
  14. 转 RMAN-20005: target database name is ambiguous
  15. SpringCloud-7-配置中心
  16. Python实现的BeagleBone Black 串口助手(全部源码)
  17. 鲁棒优化(5):通过yalmip中uncertain命令快速各类不确定集合下的鲁棒优化
  18. 爬虫练习(1)-- 爬取豆瓣最新电影
  19. Stm32CubeMx 通过SPIflash做一个U盘
  20. C++知识总结——运算符重载

热门文章

  1. mysql 值到99999后不增值了_Mysql 增加新数据,若存在则更新的问题
  2. JZOJ 5392. 【NOIP2017提高A组模拟10.5】Lucky Transformation
  3. 反恐精英出现服务器消息,cs你已被禁用次服务器 | 手游网游页游攻略大全
  4. adb shell 修改文件名_从零开始学Linux运维|27.Shell编程(函数与参数的传递)
  5. css 透明_css属性transparent有时候并不是透明的
  6. mysql数据丢失_当数据被误删除/误操作后造成数据丢失。你尝试过用什么手段来挽救数据/损失?...
  7. Qt MVC编程之table view 的简单应用
  8. 集美大学诚毅学院计算机科学与技术学费,集美大学诚毅学院计算机科学与技术...
  9. 调用手机相机相册_如果你用华为手机拍照!记得开启专业模式,照片好看十倍不止...
  10. lnmp环境搭建 php7,lnmp环境搭建(centos6.9+mysql5.7+php7.1+nginx1.10)