近段对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 List3. 调用和使用。
在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如下:
至此,没有了。this is just a test
欢迎留言,讨论!求进步!
留源码下载地址:http://download.csdn.net/detail/cartzhang/5591659