C# 派生类的XmlSerializer序列化XML
来源:互联网 发布:淘宝卖家论坛哪个好 编辑:程序博客网 时间:2024/05/23 11:51
近段对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; } } // 线的STYLE public class LineStyle : Style { [XmlElement("Line")] public string LineNode { get; set; } [XmlElement("Count")] public int CountNode { get; set; } } // 点的STYLE public 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(); // StyleNote StyleNote 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
- C# 派生类的XmlSerializer序列化XML
- C# XML序列化实例学习:XmlSerializer
- c# xmlserializer 序列化
- C# XML反序列化与序列化举例:XmlSerializer
- XmlSerializer序列化XML文件
- C# XmlSerializer 对象的Xml序列化和反序列化
- XML序列化(XMLSerializer)中,类和xml的对应关系
- XmlSerializer 对象的Xml序列化和反序列化
- XmlSerializer 对象的Xml序列化和反序列化
- XmlSerializer 对象的Xml序列化和反序列化
- XmlSerializer 对象的Xml序列化和反序列化
- XmlSerializer 对象的Xml序列化和反序列化
- android xml文件的序列化--XmlSerializer简单用法
- C# 实体类序列化与反序列化一 (XmlSerializer)
- 使用XmlSerializer 进行xml序列化
- 使用XmlSerializer 进行xml序列化
- xml 备份短信 序列化器 XmlSerializer
- C#从类序列化为xml文件,和从xml文件反序列化为类,XmlSerializer
- 项目总是有红叉叉,打开又没错,Build path contains duplicate entry: '...' for project 'X
- 《黑马程序员》java笔记->StringBuffer概述及StringBuilder和数组的区别
- 实现链表中存储数据的逆序
- putty与vim 乱码
- 下拉列表(JComboBox)使用
- C# 派生类的XmlSerializer序列化XML
- 【翻译】exploring_expect Chapter 7. Debugging Patterns And Controlling output 调试模式和输出控制
- poj 3468 A Simple Problem with Integers
- Android当中layer-list使用来实现多个图层堆叠到一块儿
- 最小化安装debian后的配置
- 为什么 Vim 使用 HJKL 键作为方向键
- 安卓评分进度条RatingBar
- 窗体和控件的一个小实验:控制一个飞机左右移动
- UVa 160 Factors ans Factorials(数论)