主程序进行序列化生成xml文件,和反序列化得到xml文件中某个节点的属性
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.IO;
namespace TrackGeoInfo
{
class Program
{
static void Main(string[] args)
{
Serialize();//序列化
//DeSerialize();//反序列化
}
public static void Serialize()
{
////测试保存TrackPiece
//TrackPiece t = new TrackPiece(120, 120, 200, 22, 33);
//try
//{
// FileStream fs = new FileStream("C:\\Users\\18333\\Desktop\\serialiable.xml", FileMode.Create);
// XmlSerializer xs = new XmlSerializer(typeof(TrackPiece));
// xs.Serialize(fs, t);
//}
//catch (Exception ex)
//{
// Console.WriteLine(ex.Message);
//}
//Console.WriteLine("序列化成功!");
//Console.ReadKey();
////测试Track
//Track t = new Track(2, 2, 2, 2, 2, 2, 2, 2, "s", "dd");
//try
//{
// FileStream fs = new FileStream("C:\\Users\\18333\\Desktop\\serialiable.xml", FileMode.Create);
// //XmlSerializer xs = new XmlSerializer(typeof(TrackPiece));
// XmlSerializer xs = new XmlSerializer(typeof(Track));
// xs.Serialize(fs, t);
//}
//catch (Exception ex)
//{
// Console.WriteLine(ex.Message);
//}
//Console.WriteLine("序列化成功!");
//Console.ReadKey();
//测试TrackGIS
//TrackPiece[] trackPieces = new TrackPiece[] {new TrackPiece(2, 2, 2, 2, 3),new TrackPiece(3,3,3,3,2) };
//TrackGIS t = new TrackGIS(trackPieces);
TrackPiece tp = new TrackPiece(2, 2, 2, 2, 3);
TrackPiece tp2 = new TrackPiece(3, 3, 3, 3, 2);
TrackPiece[] trackPieces = new TrackPiece[] { tp, tp2 };
TrackGIS t = new TrackGIS(trackPieces);
try
{
FileStream fs = new FileStream("C:\\Users\\18333\\Desktop\\serialiable.xml", FileMode.Create);
//XmlSerializer xs = new XmlSerializer(typeof(TrackPiece));
XmlSerializer xs = new XmlSerializer(typeof(TrackGIS));
xs.Serialize(fs, t);
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
Console.WriteLine(ex.Message);
}
Console.WriteLine("序列化成功!");
Console.ReadKey();
}
public static void DeSerialize()
{
try
{
//测试TrackPiece
//FileStream fs = new FileStream("C:\\Users\\18333\\Desktop\\TrackPiece.xml",FileMode.Open,FileAccess.Read);
//XmlSerializer xs = new XmlSerializer(typeof(TrackPiece));
//TrackPiece t = (TrackPiece)xs.Deserialize(fs);
//Console.WriteLine(t.DeltaPos+"\r\n"+t.DeltaLon);
////测试Track
//FileStream fs = new FileStream("C:\\Users\\18333\\Desktop\\Track.xml", FileMode.Open, FileAccess.Read);
//XmlSerializer xs = new XmlSerializer(typeof(Track));
//Track t = (Track)xs.Deserialize(fs);
//Console.WriteLine(t.StartAddress + "\r\n" + t.EndAddress);
////测试TrackGIS
//FileStream fs = new FileStream("C:\\Users\\18333\\Desktop\\Serialiable.xml", FileMode.Open, FileAccess.Read);
//XmlSerializer xs = new XmlSerializer(typeof(TrackGIS));
//TrackGIS t = (TrackGIS)xs.Deserialize(fs);
//foreach (TrackPiece a in t.TrackPieces)
//{
// Console.WriteLine(a.DeltaLat + "\r\n" + a.DeltaLon);
//}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.Read();
Console.ReadKey();
}
}
}
依据UML类里写的
是这个文件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using System.ComponentModel;
using System.Xml;
namespace TrackGeoInfo
{
[Serializable]
[XmlRoot("TrackInfo")]
public class TrackInfo
{
private TrackHeadInfo trackHeadInfo;
//private TrackFileProperty trackFileProperty;//轨道地理数据信息头
//private Track[] tracks;
private TrackGIS trackGIS;
public TrackInfo()
{
trackHeadInfo = null;
trackGIS = null;
}
public TrackInfo(TrackHeadInfo th,TrackGIS tg)
{
trackHeadInfo = th;
trackGIS = tg;
}
//[XmlElement("TrackFileProperty")]
//public TrackFileProperty TrackFileProperty { get { return trackFileProperty; } set { trackFileProperty = value; } }
[XmlElement("TrackGIS")]
public TrackGIS TrackGIS { get {return trackGIS; } set {trackGIS=value; } }
//[XmlArray("Tracks"),XmlArrayItem("Track") ]
//public Track[] Tracks { get { return tracks; } set { tracks = value; } }
}
[XmlRoot("TrackHeadInfo")]
public class TrackHeadInfo
{
private TrackFileProperty trackFileProperty;//轨道地理数据信息头
private Track[] tracks;
public TrackHeadInfo()
{
trackFileProperty = null;
tracks = null;
}
public TrackHeadInfo(TrackFileProperty tf,Track[] ts)
{
trackFileProperty = tf;
tracks = ts;
}
[XmlElement("TrackFileProperty")]
public TrackFileProperty TrackFileProperty { get { return trackFileProperty; } set { trackFileProperty = value; } }
[XmlArray("Tracks"), XmlArrayItem("Track")]
public Track[] Tracks { get { return tracks; } set { tracks = value; } }
}
[XmlRoot("TrackFileProperty")]
public class TrackFileProperty
{
private byte fileType;//文件类型固定为1
private byte fileStructVersion;//文件结构版本
private byte fileDataVersion;//文件数据版本
private UInt16 stationNum;//车站编号
private byte trackCount;//轨道个数
//private Track[] tracks;//轨道
public TrackFileProperty()
{
fileType = 0;
fileStructVersion = 0;
fileDataVersion = 0;
stationNum = 0;
trackCount = 0;
}
public TrackFileProperty(byte ft,byte fsv,byte fdv,UInt16 sn,byte tc,Track[] ts)
{
fileType = ft;
fileStructVersion = fsv;
fileDataVersion = fdv;
stationNum = sn;
trackCount = tc;
// tracks = ts;
}
[XmlElement("FileType")]
public byte FileType { get { return fileType; } set { fileType = value; } }
[XmlElement("FileStructVersion")]
public byte FileStructVersion { get {return fileStructVersion; } set { fileStructVersion = value; } }
[XmlElement("FileDataVersion")]
public byte FileDataVersion { get {return fileDataVersion; } set { fileDataVersion = value; } }
[XmlElement("StationNum")]
public UInt16 StationNum { get {return stationNum; } set {stationNum=value; } }
[XmlElement("TrackCount")]
public byte TrackCount { get {return trackCount; } set {trackCount=value; } }
//[XmlArray("Tracks"),XmlArrayItem("Track")]
//public Track[] Tracks { get {return tracks; } set {tracks=value; } }
}
//????????????????????????????????????????????TrackID怎么设置
[XmlRoot("TrackGIS")]
public class TrackGIS
{
//private byte trackID;
private TrackPiece[] trackPieces;//轨道片记录数据
public TrackGIS()
{
// trackID = 2;
trackPieces = new TrackPiece[2];
}
public TrackGIS(TrackPiece[] tp)
{
trackPieces = tp;
}
//[XmlElement("TrackID")]
//public byte TrackID { get {return trackID; } set {trackID=value; } }
[XmlArray("TrackID"),XmlArrayItem("TrackPiece")]
public TrackPiece[] TrackPieces { get {return trackPieces; } set {trackPieces=value; } }
}
[XmlRoot("Track")]
public class Track
{
//字段
//轨道编号,单位无符号数1-255
private byte trackID;
//轨道特性
private int trackType;
//轨道特性名称
private string trackTypeName;
//起始位置,单位厘米,固定为0
private uint startMileage;
//起始纬度,单位毫秒
private int startLat;
//起始经度,单位毫秒
private int startLon;
//结束位置,单位厘米
private uint endMileage;
//结束纬度,单位毫秒
private int endLat;
//结束经度,单位毫秒
private int endLon;
//第一个轨道片的字节偏移
private string startAddress;
//最后一个轨道片的字节偏移,文件开始地址到当前轨道的最后一个轨道片记录点起始地址的字节偏移
private string endAddress;
public Track()
{
trackID = 0;
trackType = 0;
//trackTypeName = null;
startMileage = 0;
startLat = 0;
startLon = 0;
endMileage = 0;
endLat = 0;
endLon = 0;
startAddress = null;
endAddress = null;
}
public Track(byte ti, int ty, uint sm, int sLat,int sLon, uint em,int eLat,int eLon,string sA,string eA)
{
trackID = ti;
trackType = ty;
startMileage = sm;
startLat = sLat;
startLon = sLon;
endMileage = em;
endLat = eLat;
endLon = eLon;
startAddress = sA;
endAddress = eA;
}
enum tracktype : int
{
单线正线 = 1,
上行正线 = 2,
下行正线 = 3,
侧线 = 4,
其他 = 5
}
/// <summary>
/// 通过轨道特性索引得到轨道名称
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
private string GetEnumNameByKey(int key)
{
return Enum.GetName(typeof(tracktype), key);
}
[XmlElement("TrackID")]
public byte TrackID { get { return trackID; } set { trackID = value; } }
//轨道特性,1-单线正线,2-上行正线,3-下行正线,4-侧线,5-其他
[XmlElement("TrackType")]
public int TrackType { get { return trackType; } set { trackType = value; } }
[XmlElement("StartMileage")]
public uint StartMileage { get { return startMileage; } set { startMileage = value; } }
[XmlElement("StartLat")]
public int StartLat { get { return startLat; } set { startLat = value; } }
[XmlElement("StartLon")]
public int StartLon { get { return startLon; } set { startLon = value; } }
[XmlElement("EndMileage")]
public uint EndMileage { get { return endMileage; } set { endMileage = value; } }
[XmlElement("EndLat")]
public int EndLat { get { return endLat; } set { endLat = value; } }
[XmlElement("EndLon")]
public int EndLon { get { return endLon; } set { endLon = value; } }
[XmlElement("StartAddress")]
public string StartAddress { get { return startAddress; } set { startAddress = value; } }
[XmlElement("EndAddress")]
public string EndAddress { get { return endAddress; } set { endAddress = value; } }
public string TrackTypeName
{ get { return trackTypeName; } set { trackTypeName = value; } }
}
[XmlRoot("TrackPiece")]
public class TrackPiece
{
private uint deltaPos;//位置增量,厘米,
private int deltaLat;//纬度增量,毫秒,该轨道起始纬度到该轨道片记录点纬度的增量
private int deltaLon;//经度增量,单位毫秒,
private short deltaHeading;//增量航向角,
private int adjacentTrack;//邻近轨道,1-是,0-否
public enum adjacentTrackType
{
是 = 1,
否 = 0
}
private string GetEnumNameByKey(int key)
{
return Enum.GetName(typeof(adjacentTrackType), key);
}
public TrackPiece()
{
deltaPos = 0;
deltaLat = 0;
deltaLon = 0;
deltaHeading = 0;
adjacentTrack = 0;
}
public TrackPiece(uint dPos ,int dLat,int dLon,short dH,int aT)
{
deltaPos = dPos;
deltaLat = dLat;
deltaLon = dLon;
deltaHeading = dH;
adjacentTrack = aT;
}
[XmlElement("DeltaPos")]
public uint DeltaPos { get { return deltaPos; } set { deltaPos = value; } }
[XmlElement("DeltaLat")]
public int DeltaLat { get { return deltaLat; } set { deltaLat = value; } }
[XmlElement("DeltaLon")]
public int DeltaLon { get { return deltaLon; } set { deltaLon = value; } }
[XmlElement("DeltaHeading")]
public short DeltaHeading { get { return deltaHeading; } set { deltaHeading = value; } }
[XmlElement("AdjacentTrack")]
public int AdjacentTrack { get { return adjacentTrack; } set { adjacentTrack = value; } }
}
}
第二版:生成的文件有些不同
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using System.ComponentModel;
using System.Xml;
namespace TrackGeoInfo
{
[Serializable]
[XmlRoot("TrackInfo")]
public class TrackInfo
{
private TrackHeadInfo trackHeadInfo;
//private TrackFileProperty trackFileProperty;//轨道地理数据信息头
//private Track[] tracks;
private TrackGIS trackGIS;
public TrackInfo()
{
trackHeadInfo = null;
trackGIS = null;
}
public TrackInfo(TrackHeadInfo th,TrackGIS tg)
{
trackHeadInfo = th;
trackGIS = tg;
}
//[XmlElement("TrackFileProperty")]
//public TrackFileProperty TrackFileProperty { get { return trackFileProperty; } set { trackFileProperty = value; } }
[XmlElement("TrackHeadInfo")]
public TrackHeadInfo TrackHeadInfo { get {return trackHeadInfo; } set {trackHeadInfo=value; } }
[XmlElement("TrackGIS")]
public TrackGIS TrackGIS { get {return trackGIS; } set {trackGIS=value; } }
//[XmlArray("Tracks"),XmlArrayItem("Track") ]
//public Track[] Tracks { get { return tracks; } set { tracks = value; } }
}
[XmlRoot("TrackHeadInfo")]
public class TrackHeadInfo
{
private TrackFileProperty trackFileProperty;//轨道地理数据信息头
//private Track[] tracks;
private List<Track> tracks;
public TrackHeadInfo()
{
trackFileProperty = null;
tracks = null;
}
public TrackHeadInfo(TrackFileProperty tf,/*Track[] ts*/List<Track> ts)
{
trackFileProperty = tf;
tracks = ts;
}
[XmlElement("TrackFileProperty")]
public TrackFileProperty TrackFileProperty { get { return trackFileProperty; } set { trackFileProperty = value; } }
//[XmlArray("Tracks"), XmlArrayItem("Track")]
//public Track[] Tracks { get { return tracks; } set { tracks = value; } }
[XmlArray("Tracks"),XmlArrayItem("Track")]
public List<Track> Tracks { get {return tracks; } set {tracks=value; } }
}
[XmlRoot("TrackFileProperty")]
public class TrackFileProperty
{
private byte fileType;//文件类型固定为1
private byte fileStructVersion;//文件结构版本
private byte fileDataVersion;//文件数据版本
private UInt16 stationNum;//车站编号
private byte trackCount;//轨道个数
//private Track[] tracks;//轨道
//private List<Track> tracks;
public TrackFileProperty()
{
fileType = 0;
fileStructVersion = 0;
fileDataVersion = 0;
stationNum = 0;
trackCount = 0;
}
public TrackFileProperty(byte ft,byte fsv,byte fdv,UInt16 sn,byte tc,Track[] ts)
{
fileType = ft;
fileStructVersion = fsv;
fileDataVersion = fdv;
stationNum = sn;
trackCount = tc;
// tracks = ts;
}
[XmlElement("FileType")]
public byte FileType { get { return fileType; } set { fileType = value; } }
[XmlElement("FileStructVersion")]
public byte FileStructVersion { get {return fileStructVersion; } set { fileStructVersion = value; } }
[XmlElement("FileDataVersion")]
public byte FileDataVersion { get {return fileDataVersion; } set { fileDataVersion = value; } }
[XmlElement("StationNum")]
public UInt16 StationNum { get {return stationNum; } set {stationNum=value; } }
[XmlElement("TrackCount")]
public byte TrackCount { get {return trackCount; } set {trackCount=value; } }
//[XmlArray("Tracks"),XmlArrayItem("Track")]
//public Track[] Tracks { get {return tracks; } set {tracks=value; } }
//[XmlArray("Tracks"), XmlArrayItem("Track")]
//public List<Track> Tracks { get { return tracks; } set { tracks = value; } }
}
[XmlRoot("TrackGIS")]
public class TrackGIS
{
//private TrackPiece[] trackPieces;//轨道片记录数据
private List<TrackPiece> trackPieces;
public TrackGIS()
{
//trackPieces = new TrackPiece[2];
trackPieces = new List<TrackPiece>(2);
}
public TrackGIS(/*TrackPiece[] tp*/List<TrackPiece> tp)
{
trackPieces = tp;
}
//[XmlArray("Track"), XmlArrayItem("TrackPiece")]
////[XmlArray("TrackID"),XmlArrayItem("TrackPiece")]
//public TrackPiece[] TrackPieces { get {return trackPieces; } set {trackPieces=value; } }
[XmlArray("Track"),XmlArrayItem("TrackPiece")]
public List<TrackPiece> TrackPieces { get {return trackPieces; } set {trackPieces=value; } }
}
[XmlRoot("Track")]
public class Track
{
//字段
//轨道编号,单位无符号数1-255
private byte trackID;
//轨道特性
private int trackType;
//轨道特性名称
private string trackTypeName;
//起始位置,单位厘米,固定为0
private uint startMileage;
//起始纬度,单位毫秒
private int startLat;
//起始经度,单位毫秒
private int startLon;
//结束位置,单位厘米
private uint endMileage;
//结束纬度,单位毫秒
private int endLat;
//结束经度,单位毫秒
private int endLon;
//第一个轨道片的字节偏移
private string startAddress;
//最后一个轨道片的字节偏移,文件开始地址到当前轨道的最后一个轨道片记录点起始地址的字节偏移
private string endAddress;
public Track()
{
trackID = 0;
trackType = 0;
//trackTypeName = null;
startMileage = 0;
startLat = 0;
startLon = 0;
endMileage = 0;
endLat = 0;
endLon = 0;
startAddress = null;
endAddress = null;
}
public Track(byte ti, int ty, uint sm, int sLat,int sLon, uint em,int eLat,int eLon,string sA,string eA)
{
trackID = ti;
trackType = ty;
startMileage = sm;
startLat = sLat;
startLon = sLon;
endMileage = em;
endLat = eLat;
endLon = eLon;
startAddress = sA;
endAddress = eA;
}
enum tracktype : int
{
单线正线 = 1,
上行正线 = 2,
下行正线 = 3,
侧线 = 4,
其他 = 5
}
/// <summary>
/// 通过轨道特性索引得到轨道名称
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
private string GetEnumNameByKey(int key)
{
return Enum.GetName(typeof(tracktype), key);
}
[XmlElement("TrackID")]
public byte TrackID { get { return trackID; } set { trackID = value; } }
//轨道特性,1-单线正线,2-上行正线,3-下行正线,4-侧线,5-其他
[XmlElement("TrackType")]
public int TrackType { get { return trackType; } set { trackType = value; } }
[XmlElement("StartMileage")]
public uint StartMileage { get { return startMileage; } set { startMileage = value; } }
[XmlElement("StartLat")]
public int StartLat { get { return startLat; } set { startLat = value; } }
[XmlElement("StartLon")]
public int StartLon { get { return startLon; } set { startLon = value; } }
[XmlElement("EndMileage")]
public uint EndMileage { get { return endMileage; } set { endMileage = value; } }
[XmlElement("EndLat")]
public int EndLat { get { return endLat; } set { endLat = value; } }
[XmlElement("EndLon")]
public int EndLon { get { return endLon; } set { endLon = value; } }
[XmlElement("StartAddress")]
public string StartAddress { get { return startAddress; } set { startAddress = value; } }
[XmlElement("EndAddress")]
public string EndAddress { get { return endAddress; } set { endAddress = value; } }
public string TrackTypeName
{ get { return trackTypeName; } set { trackTypeName = value; } }
}
[XmlRoot("TrackPiece")]
public class TrackPiece
{
private uint deltaPos;//位置增量,厘米,
private int deltaLat;//纬度增量,毫秒,该轨道起始纬度到该轨道片记录点纬度的增量
private int deltaLon;//经度增量,单位毫秒,
private short deltaHeading;//增量航向角,
private int adjacentTrack;//邻近轨道,1-是,0-否
public enum adjacentTrackType
{
是 = 1,
否 = 0
}
private string GetEnumNameByKey(int key)
{
return Enum.GetName(typeof(adjacentTrackType), key);
}
public TrackPiece()
{
deltaPos = 0;
deltaLat = 0;
deltaLon = 0;
deltaHeading = 0;
adjacentTrack = 0;
}
public TrackPiece(uint dPos ,int dLat,int dLon,short dH,int aT)
{
deltaPos = dPos;
deltaLat = dLat;
deltaLon = dLon;
deltaHeading = dH;
adjacentTrack = aT;
}
[XmlElement("DeltaPos")]
public uint DeltaPos { get { return deltaPos; } set { deltaPos = value; } }
[XmlElement("DeltaLat")]
public int DeltaLat { get { return deltaLat; } set { deltaLat = value; } }
[XmlElement("DeltaLon")]
public int DeltaLon { get { return deltaLon; } set { deltaLon = value; } }
[XmlElement("DeltaHeading")]
public short DeltaHeading { get { return deltaHeading; } set { deltaHeading = value; } }
[XmlElement("AdjacentTrack")]
public int AdjacentTrack { get { return adjacentTrack; } set { adjacentTrack = value; } }
}
}
生成的xml文件
在主程序里写了定义了完整的轨道地理信息文件
static void Main(string[] args)
{
Serialize();//序列化
//DeSerialize();//反序列化
}
//序列化生成xml文件
public static void Serialize()
{
////测试TrackInfo--有TrackHeadInfo还有TrackGIS
///
TrackFileProperty trackFileProperty = new TrackFileProperty(2, 2, 2, 2, 2, null);
Track t1 = new Track(2, 2, 2, 3, 4, 5, 5, 6, "0xFFFFFFF", "0xFFFFFF");
Track t2 = new Track(1, 1, 1, 1, 1, 1, 1, 1, "0xFFFFF", "0xFFFFF");
TrackHeadInfo trackHeadInfo = new TrackHeadInfo();
trackHeadInfo.TrackFileProperty = trackFileProperty;
List<Track> ts = new List<Track>();
ts.Add(t1);
ts.Add(t2);
trackHeadInfo.Tracks = ts;
TrackGIS trackGIS = new TrackGIS();
TrackPiece tp1 = new TrackPiece(1, 2, 3, 4, 5);
TrackPiece tp2 = new TrackPiece(3, 4, 5, 6, 7);
List<TrackPiece> a = new List<TrackPiece>();
a.Add(tp1);
a.Add(tp2);
trackGIS.TrackPieces = a;
TrackInfo trackInfo = new TrackInfo();
trackInfo.TrackGIS = trackGIS;
trackInfo.TrackHeadInfo = trackHeadInfo;
try
{
////可以强制删除命名空间,添加声明头
XmlSerializer xs = new XmlSerializer(typeof(TrackInfo));
FileStream fs = new FileStream("C:\\Users\\18333\\Desktop\\serialiable.xml", FileMode.Create);
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = " ";
settings.NewLineChars = "\r\n";
settings.Encoding = Encoding.UTF8;
settings.OmitXmlDeclaration = false;
using (XmlWriter xmlWriter = XmlWriter.Create(fs, settings))
{
XmlSerializerNamespaces namespaces = new XmlSerializerNamespaces();
namespaces.Add(string.Empty, string.Empty);
xs.Serialize(xmlWriter, trackInfo, namespaces);//TrackInfo
xmlWriter.Close();
}
fs.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
Console.WriteLine(ex.Message);
}
Console.WriteLine("序列化成功!");
Console.ReadKey();
}
//反序列化
public static void DeSerialize()
{
try
{
//测试TrackPiece
//FileStream fs = new FileStream("C:\\Users\\18333\\Desktop\\TrackPiece.xml",FileMode.Open,FileAccess.Read);
//XmlSerializer xs = new XmlSerializer(typeof(TrackPiece));
//TrackPiece t = (TrackPiece)xs.Deserialize(fs);
//Console.WriteLine(t.DeltaPos+"\r\n"+t.DeltaLon);
////测试Track
//FileStream fs = new FileStream("C:\\Users\\18333\\Desktop\\Track.xml", FileMode.Open, FileAccess.Read);
//XmlSerializer xs = new XmlSerializer(typeof(Track));
//Track t = (Track)xs.Deserialize(fs);
//Console.WriteLine(t.StartAddress + "\r\n" + t.EndAddress);
////测试TrackGIS
//FileStream fs = new FileStream("C:\\Users\\18333\\Desktop\\Serialiable.xml", FileMode.Open, FileAccess.Read);
//XmlSerializer xs = new XmlSerializer(typeof(TrackGIS));
//TrackGIS t = (TrackGIS)xs.Deserialize(fs);
//foreach (TrackPiece a in t.TrackPieces)
//{
// Console.WriteLine(a.DeltaLat + "\r\n" + a.DeltaLon);
//}
}
catch(Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.Read();
Console.ReadKey();
}
}
生成的xml文件
<?xml version="1.0" encoding="utf-8"?>
<TrackInfo>
<TrackHeadInfo>
<TrackFileProperty>
<FileType>2</FileType>
<FileStructVersion>2</FileStructVersion>
<FileDataVersion>2</FileDataVersion>
<StationNum>2</StationNum>
<TrackCount>2</TrackCount>
</TrackFileProperty>
<Tracks>
<Track>
<TrackID>2</TrackID>
<TrackType>2</TrackType>
<StartMileage>2</StartMileage>
<StartLat>3</StartLat>
<StartLon>4</StartLon>
<EndMileage>5</EndMileage>
<EndLat>5</EndLat>
<EndLon>6</EndLon>
<StartAddress>0xFFFFFFF</StartAddress>
<EndAddress>0xFFFFFF</EndAddress>
</Track>
<Track>
<TrackID>1</TrackID>
<TrackType>1</TrackType>
<StartMileage>1</StartMileage>
<StartLat>1</StartLat>
<StartLon>1</StartLon>
<EndMileage>1</EndMileage>
<EndLat>1</EndLat>
<EndLon>1</EndLon>
<StartAddress>0xFFFFF</StartAddress>
<EndAddress>0xFFFFF</EndAddress>
</Track>
</Tracks>
</TrackHeadInfo>
<TrackGIS>
<Track>
<TrackPiece>
<DeltaPos>1</DeltaPos>
<DeltaLat>2</DeltaLat>
<DeltaLon>3</DeltaLon>
<DeltaHeading>4</DeltaHeading>
<AdjacentTrack>5</AdjacentTrack>
</TrackPiece>
<TrackPiece>
<DeltaPos>3</DeltaPos>
<DeltaLat>4</DeltaLat>
<DeltaLon>5</DeltaLon>
<DeltaHeading>6</DeltaHeading>
<AdjacentTrack>7</AdjacentTrack>
</TrackPiece>
</Track>
</TrackGIS>
</TrackInfo>
由于上一版定义了TrackGIS只有一个轨道的多轨道片数据
第三版
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
using System.ComponentModel;
using System.Xml;
namespace TrackGeoInfo
{
//轨道地理信息文件包括信息头和TrackGIS轨道片记录点的数据
[Serializable]
[XmlRoot("TrackInfo")]
public class TrackInfo
{
private TrackHeadInfo trackHeadInfo;
private TrackGIS trackGIS;
public TrackInfo()
{
trackHeadInfo = null;
trackGIS = null;
}
public TrackInfo(TrackHeadInfo th,TrackGIS tg)
{
trackHeadInfo = th;
trackGIS = tg;
}
[XmlElement("TrackHeadInfo")]
public TrackHeadInfo TrackHeadInfo { get {return trackHeadInfo; } set {trackHeadInfo=value; } }
//[XmlElement("TrackGIS")]
//public TrackGIS TrackGIS { get {return trackGIS; } set {trackGIS=value; } }
[XmlElement("TrackGIS")]
public TrackGIS TrackGIS { get { return trackGIS; } set { trackGIS = value; } }
}
#region 轨道地理信息头(包含轨道地理信息文件属性和轨道集)
[XmlRoot("TrackHeadInfo")]
public class TrackHeadInfo
{
private TrackFileProperty trackFileProperty;//轨道地理数据信息头
private List<Track> tracks;
public TrackHeadInfo()
{
trackFileProperty = null;
tracks = null;
}
public TrackHeadInfo(TrackFileProperty tf,List<Track> ts)
{
trackFileProperty = tf;
tracks = ts;
}
[XmlElement("TrackFileProperty")]
public TrackFileProperty TrackFileProperty { get { return trackFileProperty; } set { trackFileProperty = value; } }
[XmlArray("Tracks"),XmlArrayItem("Track")]
public List<Track> Tracks { get {return tracks; } set {tracks=value; } }
}
#region 轨道地理信息文件属性
[XmlRoot("TrackFileProperty")]
public class TrackFileProperty
{
private byte fileType;//文件类型固定为1
private byte fileStructVersion;//文件结构版本
private byte fileDataVersion;//文件数据版本
private UInt16 stationNum;//车站编号
private byte trackCount;//轨道个数
public TrackFileProperty()
{
fileType = 0;
fileStructVersion = 0;
fileDataVersion = 0;
stationNum = 0;
trackCount = 0;
}
public TrackFileProperty(byte ft,byte fsv,byte fdv,UInt16 sn,byte tc,Track[] ts)
{
fileType = ft;
fileStructVersion = fsv;
fileDataVersion = fdv;
stationNum = sn;
trackCount = tc;
}
[XmlElement("FileType")]
public byte FileType { get { return fileType; } set { fileType = value; } }
[XmlElement("FileStructVersion")]
public byte FileStructVersion { get {return fileStructVersion; } set { fileStructVersion = value; } }
[XmlElement("FileDataVersion")]
public byte FileDataVersion { get {return fileDataVersion; } set { fileDataVersion = value; } }
[XmlElement("StationNum")]
public UInt16 StationNum { get {return stationNum; } set {stationNum=value; } }
[XmlElement("TrackCount")]
public byte TrackCount { get {return trackCount; } set {trackCount=value; } }
}
#endregion
#region 轨道属性
[XmlRoot("Track")]
public class Track
{
//字段
//轨道编号,单位无符号数1-255
private byte trackID;
//轨道特性
private int trackType;
//轨道特性名称
private string trackTypeName;
//起始位置,单位厘米,固定为0
private uint startMileage;
//起始纬度,单位毫秒
private int startLat;
//起始经度,单位毫秒
private int startLon;
//结束位置,单位厘米
private uint endMileage;
//结束纬度,单位毫秒
private int endLat;
//结束经度,单位毫秒
private int endLon;
//第一个轨道片的字节偏移
private string startAddress;
//最后一个轨道片的字节偏移,文件开始地址到当前轨道的最后一个轨道片记录点起始地址的字节偏移
private string endAddress;
public Track()
{
trackID = 0;
trackType = 0;
//trackTypeName = null;
startMileage = 0;
startLat = 0;
startLon = 0;
endMileage = 0;
endLat = 0;
endLon = 0;
startAddress = null;
endAddress = null;
}
public Track(byte ti, int ty, uint sm, int sLat, int sLon, uint em, int eLat, int eLon, string sA, string eA)
{
trackID = ti;
trackType = ty;
startMileage = sm;
startLat = sLat;
startLon = sLon;
endMileage = em;
endLat = eLat;
endLon = eLon;
startAddress = sA;
endAddress = eA;
}
enum tracktype : int
{
单线正线 = 1,
上行正线 = 2,
下行正线 = 3,
侧线 = 4,
其他 = 5
}
/// <summary>
/// 通过轨道特性索引得到轨道名称
/// </summary>
/// <param name="key"></param>
/// <returns></returns>
private string GetEnumNameByKey(int key)
{
return Enum.GetName(typeof(tracktype), key);
}
[XmlElement("TrackID")]
public byte TrackID { get { return trackID; } set { trackID = value; } }
//轨道特性,1-单线正线,2-上行正线,3-下行正线,4-侧线,5-其他
[XmlElement("TrackType")]
public int TrackType { get { return trackType; } set { trackType = value; } }
[XmlElement("StartMileage")]
public uint StartMileage { get { return startMileage; } set { startMileage = value; } }
[XmlElement("StartLat")]
public int StartLat { get { return startLat; } set { startLat = value; } }
[XmlElement("StartLon")]
public int StartLon { get { return startLon; } set { startLon = value; } }
[XmlElement("EndMileage")]
public uint EndMileage { get { return endMileage; } set { endMileage = value; } }
[XmlElement("EndLat")]
public int EndLat { get { return endLat; } set { endLat = value; } }
[XmlElement("EndLon")]
public int EndLon { get { return endLon; } set { endLon = value; } }
[XmlElement("StartAddress")]
public string StartAddress { get { return startAddress; } set { startAddress = value; } }
[XmlElement("EndAddress")]
public string EndAddress { get { return endAddress; } set { endAddress = value; } }
public string TrackTypeName
{ get { return trackTypeName; } set { trackTypeName = value; } }
}
#endregion
#endregion
#region 轨道片数据(包括多个轨道的轨道片数据)
[XmlRoot("TrackGIS")]
public class TrackGIS
{
private List<TrackPieceGIS> trackPieceGIS;
public TrackGIS()
{
trackPieceGIS = null;
}
public TrackGIS(List<TrackPieceGIS> tp)
{
trackPieceGIS = tp;
}
[XmlElement("Track")]
public List<TrackPieceGIS> TrackPieceGIS { get {return trackPieceGIS; } set {trackPieceGIS=value; } }
}
#region 每个轨道的轨道片记录数据(包括轨道的ID还有此轨道轨道片的数据)
[XmlRoot("Track")]
public class TrackPieceGIS
{
private int trackID;
private List<TrackPiece> trackPieces;
public TrackPieceGIS()
{
trackID = 1;
trackPieces = new List<TrackPiece>();
trackPieces.Add(new TrackPiece(1, 2, 3, 4, 5));
trackPieces.Add(new TrackPiece(5, 4, 3, 2, 1));
}
public TrackPieceGIS(int trackid,List<TrackPiece> ts)
{
trackID = trackid;
trackPieces = ts;
}
[XmlElement("TrackID")]
public int TrackID { get {return trackID; } set {trackID= value; } }
[XmlElement("TrackPiece")]
public List<TrackPiece> TrackPieces { get {return trackPieces; } set {trackPieces = value; } }
}
#endregion
#region 轨道片记录点属性
[XmlRoot("TrackPiece")]
public class TrackPiece
{
private uint deltaPos;//位置增量,厘米,
private int deltaLat;//纬度增量,毫秒,该轨道起始纬度到该轨道片记录点纬度的增量
private int deltaLon;//经度增量,单位毫秒,
private short deltaHeading;//增量航向角,
private int adjacentTrack;//邻近轨道,1-是,0-否
public enum adjacentTrackType
{
是 = 1,
否 = 0
}
private string GetEnumNameByKey(int key)
{
return Enum.GetName(typeof(adjacentTrackType), key);
}
public TrackPiece()
{
deltaPos = 0;
deltaLat = 0;
deltaLon = 0;
deltaHeading = 0;
adjacentTrack = 0;
}
public TrackPiece(uint dPos ,int dLat,int dLon,short dH,int aT)
{
deltaPos = dPos;
deltaLat = dLat;
deltaLon = dLon;
deltaHeading = dH;
adjacentTrack = aT;
}
[XmlElement("DeltaPos")]
public uint DeltaPos { get { return deltaPos; } set { deltaPos = value; } }
[XmlElement("DeltaLat")]
public int DeltaLat { get { return deltaLat; } set { deltaLat = value; } }
[XmlElement("DeltaLon")]
public int DeltaLon { get { return deltaLon; } set { deltaLon = value; } }
[XmlElement("DeltaHeading")]
public short DeltaHeading { get { return deltaHeading; } set { deltaHeading = value; } }
[XmlElement("AdjacentTrack")]
public int AdjacentTrack { get { return adjacentTrack; } set { adjacentTrack = value; } }
}
#endregion
#endregion
}
这下生成的xml文件基本上和规范的没差
<?xml version="1.0" encoding="utf-8"?>
<TrackInfo>
<TrackHeadInfo>
<TrackFileProperty>
<FileType>2</FileType>
<FileStructVersion>2</FileStructVersion>
<FileDataVersion>2</FileDataVersion>
<StationNum>2</StationNum>
<TrackCount>2</TrackCount>
</TrackFileProperty>
<Tracks>
<Track>
<TrackID>2</TrackID>
<TrackType>2</TrackType>
<StartMileage>2</StartMileage>
<StartLat>3</StartLat>
<StartLon>4</StartLon>
<EndMileage>5</EndMileage>
<EndLat>5</EndLat>
<EndLon>6</EndLon>
<StartAddress>0xFFFFFFF</StartAddress>
<EndAddress>0xFFFFFF</EndAddress>
</Track>
<Track>
<TrackID>1</TrackID>
<TrackType>1</TrackType>
<StartMileage>1</StartMileage>
<StartLat>1</StartLat>
<StartLon>1</StartLon>
<EndMileage>1</EndMileage>
<EndLat>1</EndLat>
<EndLon>1</EndLon>
<StartAddress>0xFFFFF</StartAddress>
<EndAddress>0xFFFFF</EndAddress>
</Track>
</Tracks>
</TrackHeadInfo>
<TrackGIS>
<Track>
<TrackID>1</TrackID>
<TrackPiece>
<DeltaPos>1</DeltaPos>
<DeltaLat>2</DeltaLat>
<DeltaLon>3</DeltaLon>
<DeltaHeading>4</DeltaHeading>
<AdjacentTrack>5</AdjacentTrack>
</TrackPiece>
<TrackPiece>
<DeltaPos>5</DeltaPos>
<DeltaLat>4</DeltaLat>
<DeltaLon>3</DeltaLon>
<DeltaHeading>2</DeltaHeading>
<AdjacentTrack>1</AdjacentTrack>
</TrackPiece>
</Track>
<Track>
<TrackID>2</TrackID>
<TrackPiece>
<DeltaPos>5</DeltaPos>
<DeltaLat>6</DeltaLat>
<DeltaLon>7</DeltaLon>
<DeltaHeading>8</DeltaHeading>
<AdjacentTrack>9</AdjacentTrack>
</TrackPiece>
<TrackPiece>
<DeltaPos>9</DeltaPos>
<DeltaLat>8</DeltaLat>
<DeltaLon>7</DeltaLon>
<DeltaHeading>6</DeltaHeading>
<AdjacentTrack>5</AdjacentTrack>
</TrackPiece>
</Track>
</TrackGIS>
</TrackInfo>