博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 派生类的XmlSerializer序列化XML
阅读量:5278 次
发布时间:2019-06-14

本文共 3459 字,大约阅读时间需要 11 分钟。

近段对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
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如下:

this is just a test
至此,没有了。

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

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

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

你可能感兴趣的文章
Unity调用Windows窗口句柄,选择文件和目录
查看>>
HashMap循环遍历方式
查看>>
React Native 入门 调试项目
查看>>
C# 通过 Quartz .NET 实现 schedule job 的处理
查看>>
关于java之socket输入流输出流可否放在不同的线程里进行处理
查看>>
目前为止用过的最好的Json互转工具类ConvertJson
查看>>
Day13
查看>>
tensorflow saver简介+Demo with linear-model
查看>>
Luogu_4103 [HEOI2014]大工程
查看>>
Oracle——SQL基础
查看>>
项目置顶随笔
查看>>
Redis的安装与使用
查看>>
P1970 花匠
查看>>
java语言与java技术
查看>>
NOIP2016提高A组五校联考2总结
查看>>
iOS 项目的编译速度提高
查看>>
table中checkbox选择多行
查看>>
Magento开发文档(三):Magento控制器
查看>>
性能调优攻略
查看>>
ie6解决png图片透明问题
查看>>