C# 派生类的XmlSerializer序列化XML
近段对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相关推荐
- android之XmlSerializer序列化XML(写入)
android之XmlSerializer序列化XML(写入)...
android之XmlSerializer序列化XML(写入) 分类:android_数据增删查改2011-03-03 11:497437人阅读评论(2)收藏举报 androidxmlstringen ...
- c语言xml序列化,C# XML和实体类之间相互转换(序列化和反序列化)
我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlUtil类,该类来自网络并稍加修改. using System; using System.Collections.Ge ...
- XML和实体类之间相互转换(序列化和反序列化)
我们需要在XML与实体类,DataTable,List之间进行转换,下面是XmlUtil类,该类来自网络并稍加修改. using System; using System.Collections.Ge ...
- c# XML和实体类之间相互转换(序列化和反序列化)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...
- (3)[wp7数据存储] WP7 IsolatedStorage系列篇——通过XmlSerializer读写XML文件 [复制链接]...
发表于 2012-5-17 15:51:07 |只看该作者 |倒序浏览 分享到: 本帖最后由 agameboy 于 2012-5-17 17:08 编辑 这一篇我们会通过XmlSerializer读写 ...
- android xml对象,对象转成xml(并且序列化xml)在android中
第一种 在本地生成AppuserManager.xml文件,并且把对象转成了xml格式 package com.example.hasee.myxml; import android.app.Acti ...
- 简单介绍实体类或对象序列化时,忽略为空属性的操作
这篇文章主要介绍了实体类或对象序列化时,忽略为空属性的操作,具有很好的参考价值,希望对大家有所帮助.如有错误或未考虑完全的地方,望不吝赐教 第一种,在配置文件配置 在application.xml直接 ...
- 派生类参数初始化列表和基类构造函数顺序
今天被问到了一个问题,随便回了一句,父类还没有构建,怎么能初始化父类的成员. 派生类构造函数的参数初始化列表,为什么不能初始化基类的成员? 例如下面的是不可以的 class Rectangle : p ...
- C++派生类与基类构造函数调用次序
本文用来测试C++基类和派生类构造函数,析构函数,和拷贝构造函数的调用次序. 运行环境:SUSE Linux Enterprise Server 11 SP2 (x86_64) #include & ...
最新文章
- sqlalchemy数据库中的offset偏移查询的使用
- BUUCTF(misc)变异凯撒 --二
- jQuery库与其他JS库冲突的解决办法
- springBoot修改代码不需要重启-热部署
- mysql oracle 备份数据库备份_完整备份Oracle数据库
- 大华平台linux密码忘记,大华乐橙sn1(海思hi3798c)刷机
- idea 2018 破解教程
- 《缠中说禅108课》57:当下图解分析再示范
- js根据年份计算总周数并获取每周的日期范围
- 工作记录 --01 验证证件号合法性!
- 如何使用 Java 将 PDF 转换为文本 (TXT)
- 风变python培训班学费一般多少
- 爬虫实战—拿下最全租房数据 | 附源码
- 转 RMAN-20005: target database name is ambiguous
- SpringCloud-7-配置中心
- Python实现的BeagleBone Black 串口助手(全部源码)
- 鲁棒优化(5):通过yalmip中uncertain命令快速各类不确定集合下的鲁棒优化
- 爬虫练习(1)-- 爬取豆瓣最新电影
- Stm32CubeMx 通过SPIflash做一个U盘
- C++知识总结——运算符重载
热门文章
- mysql 值到99999后不增值了_Mysql 增加新数据,若存在则更新的问题
- JZOJ 5392. 【NOIP2017提高A组模拟10.5】Lucky Transformation
- 反恐精英出现服务器消息,cs你已被禁用次服务器 | 手游网游页游攻略大全
- adb shell 修改文件名_从零开始学Linux运维|27.Shell编程(函数与参数的传递)
- css 透明_css属性transparent有时候并不是透明的
- mysql数据丢失_当数据被误删除/误操作后造成数据丢失。你尝试过用什么手段来挽救数据/损失?...
- Qt MVC编程之table view 的简单应用
- 集美大学诚毅学院计算机科学与技术学费,集美大学诚毅学院计算机科学与技术...
- 调用手机相机相册_如果你用华为手机拍照!记得开启专业模式,照片好看十倍不止...
- lnmp环境搭建 php7,lnmp环境搭建(centos6.9+mysql5.7+php7.1+nginx1.10)