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

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

最近在搞谷歌地球二次开发,其中对kml文件的操作非常之频繁,kml符合xml的标准,所以在项目中会经常将对象序列化成xml,然后在调用LoadKmlData()方法加载到GoogleEarth,在开发过程中遇到这样的问题,A类中包含B类,B类是一个基类,B类派生出C、D类,在实际使用中A类中的B类实例化成C类或D类,但在序列化时得不到想要的结果,经过仔细研究解决问题,直接上代码。

A  = KmlPlacemark;B = KmlBaseGraph;C = KmlPoint; D = KmlLineString

///     /// 目标对象    ///     [XmlType(TypeName="Placemark")]    public class KmlPlacemark    {        ///         /// 目标对象ID        ///         [XmlAttribute]        public string id { get; set; }        ///         /// 对象名称        ///         public string name { get; set; }        ///         /// 对象描述----可存放链接和图片        /// 如www.baidu.com]]>        ///         public string description { get; set; }        ///         /// 样式路径        ///         public string styleUrl { get; set; }        public KmlLookAt LookAt{get;set;}        ///         /// 模型        ///         public KmlModel Model { get; set; }        ///         /// 样式        ///         public KmlStyle Style { get; set; }           [XmlElement(typeof(KmlPoint))]        [XmlElement(typeof(KmlLineString))]        [XmlElement(typeof(KmlPolygon))]        public KmlBaseGraph Graph { get; set; }    }

  KmlBaseGraph类

[Serializable]    public class KmlBaseGraph    {    }

  

[XmlType(TypeName = "Point")]    public class KmlPoint : KmlBaseGraph    {        ///         /// 目标空间位置组合        ///         public string coordinates { get; set; }    }

  

///     /// 绘制图形的基本类    ///     [XmlType(TypeName = "LineString")]    public class KmlLineString : KmlBaseGraph    {        public int tessellate { get; set; }        ///         /// 线两点空间坐标位置组合        ///         public string coordinates { get; set; }    }

  

要注意KmlPlacemark类中红色部分代码,这里添加多个派生类元素类型,当在序列化时,就会根据当前派生类的对象,成不同的xml节点,这样就到达我想要的效果(同一个类实对象在实例化不同的派生类时,序列化的xml为不同的节点)。

结果1:

结果2:

转载于:https://www.cnblogs.com/Jins/p/5392939.html

你可能感兴趣的文章
018.Zabbix维护时间和模板导入
查看>>
Apache并发处理模块
查看>>
Servlet异常
查看>>
菜鸟学习MVC实录:弄清项目各类库的作用和用法
查看>>
day32
查看>>
Binding在WPF中的使用
查看>>
软件测试技术第二次作业——程序错误的判断
查看>>
【啊哈!算法】之二、插入排序
查看>>
workaround for %33 texture memory bug
查看>>
2.2 PostgreSQL 概念
查看>>
2.6. PostgreSQL表之间连接
查看>>
获取构造器的信息
查看>>
[译] ASP.NET 生命周期 – ASP.NET 上下文对象(八)
查看>>
LiveJournal发展历程
查看>>
添加启动类
查看>>
linux oracle手动启动两个实例
查看>>
Vijos p1484 ISBN号码
查看>>
人月神话第三章
查看>>
linux下mysql数据库操作命令
查看>>
【NOIP必备攻略】 基本noilinux使用方法
查看>>