1、以对象编程,简化程序代码。
2、以对象编程,对程序配置文件实施简单的读写。
WinRiver 的项目 MMT 文件,是 RDI ADCP 的测量项目记录,包含很多设置。
False
汉口分局
中国
湖北
武汉
XHZ20240806_22_000_24-08-06.PD0
XHZ20240806_22_000_24-08-06_ASC.TXT
XHZ20240806_22_000_24-08-06_EH.TXT
XHZ20240806_22_000_24-08-06_GPS.TXT
18.000000
创建新的类,命名为 WinRiverXML。
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;
namespace 命名空间
{
public class WinRiverXML
{
//将 3.1 - 3.8 的代码内容放入
}
}
/// WinRiver根目录
[XmlRoot("WinRiver")]
public class WinRiver
{
/// 项目
[XmlElement("Project")]
public Project Project { get; set; }
}
/// 项目
public class Project
{
/// 名称属性
[XmlAttribute("Name")]
public string Name { get; set; } = "Text.mmt";
/// 版本属性
[XmlAttribute("Version")]
public string Version { get; set; } = "1.0.0.2";
/// 标志属性
[XmlAttribute("Flags")]
public string Flags { get; set; } = "0";
/// 锁定标志
[XmlElement("Locked")]
public string Locked { get; set; } = "False";
/// 测站信息
[XmlElement("Site_Information")]
public Site_Information Site_Information { get; set; }
/// 测站流量
[XmlElement("Site_Discharge")]
public Site_Discharge Site_Discharge { get; set; }
/// 质量控制
[XmlElement("QA_QC")]
public QA_QC QA_QC { get; set; }
/// 采集数据
[XmlElement("Collect_Data")]
public Collect_Data Collect_Data { get; set; }
/// 显示设置
[XmlElement("DisplaySettings")]
public DisplaySettings DisplaySettings { get; set; }
}
/// 测站信息
public class Site_Information
{
/// 类型
[XmlAttribute("Type")]
public string Type { get; set; } = "1";
/// 复选
[XmlAttribute("Checked")]
public string Checked { get; set; } = "1";
/// 类型
[XmlAttribute("Status")]
public string Status { get; set; } = "0";
/// 错误
[XmlAttribute("Error")]
public string Error { get; set; } = "0";
/// 测验单位
public string Agency { get; set; }
/// 国家
public string Country { get; set; }
/// 省
public string State { get; set; }
/// 市
public string County { get; set; }
//省略其它信息代码
}
/// 测站流量
public class Site_Discharge
{
/// 类型
[XmlAttribute("Type")]
public string Type { get; set; } = "2";
/// 复选
[XmlAttribute("Checked")]
public string Checked { get; set; } = "1";
/// 状态
[XmlAttribute("Status")]
public string Status { get; set; } = "0";
/// 错误
[XmlAttribute("Error")]
public string Error { get; set; } = "0";
/// 断面测回
[XmlElement("Transect")]
public List<Transect> Transect { get; set; }
/// 断面流量汇总
[XmlElement("Discharge_Summary")]
public Discharge_Summary Discharge_Summary { get; set; }
}
/// 质量控制
public class QA_QC
{
//省略其它内容代码
}
/// 采集数据
public class Collect_Data
{
//省略其它内容代码
}
/// 显示设置
public class DisplaySettings
{
//省略其它内容代码
}
/// 断面
public class Transect
{
/// 类型
[XmlAttribute("Type")]
public string Type { get; set; } = "5";
/// 复选
[XmlAttribute("Checked")]
public string Checked { get; set; } = "1";
/// 状态
[XmlAttribute("Status")]
public string Status { get; set; } = "0";
/// 全选
[XmlAttribute("SelectAll")]
public string SelectAll { get; set; } = "1";
/// 第一集合
[XmlAttribute("First")]
public string First { get; set; }
/// 最后集合
[XmlAttribute("Last")]
public string Last { get; set; }
/// 错误
[XmlAttribute("Error")]
public string Error { get; set; } = "0";
/// 文件
[XmlElement("File")]
public List<File> File { get; set; }
/// 配置
[XmlElement("Configuration")]
public List<Configuration> Configuration { get; set; }
}
/// 文件
public class File
{
/// 路径名称
[XmlAttribute("PathName")]
public string PathName { get; set; }
/// 类型
[XmlAttribute("Type")]
public string Type { get; set; }
/// 断面号
[XmlAttribute("TransectNmb")]
public string TransectNmb { get; set; }
/// 名称
[XmlText]
public string Name { get; set; }
}
/// 配置
public class Configuration
{
/// 类型
[XmlAttribute("Type")]
public string Type { get; set; } = "7";
/// 复选
[XmlAttribute("Checked")]
public string Checked { get; set; } = "1";
/// 状态
[XmlAttribute("Status")]
public string Status { get; set; } = "0";
/// 错误
[XmlAttribute("Error")]
public string Error { get; set; } = "0";
/// 命令
[XmlElement("Commands")]
public Commands Commands { get; set; }
/// 声速仪
[XmlElement("Depth_Sounder")]
public Depth_Sounder Depth_Sounder { get; set; }
/// 外接罗经
[XmlElement("Ext_Heading")]
public Ext_Heading Ext_Heading { get; set; }
/// GPS
[XmlElement("GPS")]
public GPS GPS { get; set; } = new GPS();
/// 流量
[XmlElement("Discharge")]
public Discharge Discharge { get; set; }
/// 边坡估算
[XmlElement("Edge_Estimates")]
public Edge_Estimates Edge_Estimates { get; set; }
/// 偏移量
[XmlElement("Offsets")]
public Offsets Offsets { get; set; }
/// 处理
[XmlElement("Processing")]
public Processing Processing { get; set; }
/// 记录
[XmlElement("Recording")]
public Recording Recording { get; set; }
/// 向导信息
[XmlElement("Wizard_Info")]
public Wizard_Info Wizard_Info { get; set; }
/// DM过滤
[XmlElement("DMFilter")]
public DMFilter DMFilter { get; set; }
}
/// 流量汇总
public class Discharge_Summary { }
/// 命令
public class Commands { }
/// 声速仪
public class Depth_Sounder { }
/// 外接罗经
public class Ext_Heading { }
/// GPS
public class GPS { }
/// 流量
public class Discharge { }
/// 边坡估算
public class Edge_Estimates { }
/// 偏移量
public class Offsets { }
/// 处理
public class Processing { }
/// 记录
public class Recording { }
/// 向导信息
public class Wizard_Info { }
/// DM过滤
public class DMFilter { }
public static void CreateFile()
{
WinRiver winRiver = new WinRiver();
Project project = new Project
{
Name = "新文件.MMT",
Version = "2.24.0.8",
Locked = "False",
Flags = "0"
};
Site_Information SiteInformation = new Site_Information
{
Type = "1",
Checked = "1",
Status = "0",
Error = "0",
Agency = "汉口水文分局",
Country = "中国",
County = "武汉市"
};
Site_Discharge SiteDischarge = new Site_Discharge
{
Type = "2",
Checked = "1",
Status = "0",
Error = "0"
};
Transect Transect0 = new Transect
{
Type = "5",
Checked = "1",
Status = "0",
SelectAll = "1",
First = "0",
Last = "0",
Error = "0"
};
File FilePD0 = new File
{
PathName = "D:\\TEST\\新文件\\新文件_000.PD0",
Type = "6",
Name = "新文件_000.PD0",
TransectNmb = "0"
};
File FileASC0 = new File
{
PathName = "D:\\TEST\\新文件\\新文件_000.ASC.TXT",
Type = "14",
Name = "新文件_000.ASC.TXT",
TransectNmb = "0"
};
File FileEH0 = new File
{
PathName = "D:\\TEST\\新文件\\新文件_000.EH.TXT",
Type = "13",
Name = "新文件_000.EH.TXT",
TransectNmb = "0"
};
File FileGPS0 = new File
{
PathName = "D:\\TEST\\新文件\\新文件_000.GPS.TXT",
Type = "11",
Name = "新文件_000.GPS.TXT",
TransectNmb = "0"
};
Transect0.File = new List<File>
{
FilePD0,
FileASC0,
FileEH0,
FileGPS0
};
Configuration configuration = new Configuration
{
Commands = new Commands(),
Depth_Sounder = new Depth_Sounder(),
Ext_Heading = new Ext_Heading(),
Discharge = new Discharge(),
Edge_Estimates = new Edge_Estimates(),
Offsets = new Offsets(),
Processing = new Processing(),
Recording = new Recording(),
Wizard_Info = new Wizard_Info(),
DMFilter = new DMFilter()
};
Transect0.Configuration = new List<Configuration>
{
configuration
};
SiteDischarge.Transect = new List<Transect>
{
Transect0
};
SiteDischarge.Discharge_Summary = new Discharge_Summary();
project.Site_Information = SiteInformation;
project.Site_Discharge = SiteDischarge;
QA_QC qA_QC = new QA_QC();
Collect_Data collect_Data = new Collect_Data();
DisplaySettings displaySettings = new DisplaySettings();
project.QA_QC = qA_QC;
project.Collect_Data = collect_Data;
project.DisplaySettings = displaySettings;
winRiver.Project = project;
Console.WriteLine();
Console.WriteLine("WinRiver对象序列化为XML字符串----------------控制台显示--------------------");
string xml;
XmlSerializer serializer = new XmlSerializer(typeof(WinRiver));//序列化WinRiver对象
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");//命名空间设为空,不显示 xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, winRiver, ns);//序列化为 StringWriter 的 xml 字符串
xml = writer.ToString();
Console.WriteLine(xml);//控制台显示
}
Console.WriteLine();
Console.WriteLine("WinRiver对象序列化为XML文件--------------------------------------------");
string ConfigFile = Environment.CurrentDirectory + "\\TestWinRiverMMT.XML";
using (FileStream fileStream = new FileStream(ConfigFile, FileMode.Create))
{
serializer.Serialize(fileStream, winRiver, ns);//序列化为文件流FileStream,保存到文件
}
Console.WriteLine();
Console.WriteLine("XML 字符串反序列化为 WinRiver 对象--------------------------------------");
// 从XML反序列化为对象
WinRiver newWinRiver;
using (StringReader reader = new StringReader(xml))
{
newWinRiver = (WinRiver)serializer.Deserialize(reader);//将 xml 字符串反序列化为WinRiver对象
}
Console.WriteLine(newWinRiver.Project.Name);//控制台显示WinRiver对象的值
Console.WriteLine(newWinRiver.Project.Version);
Console.WriteLine(newWinRiver.Project.Flags);
Console.WriteLine(newWinRiver.Project.Locked);
Console.WriteLine();
Console.WriteLine("XML 文件反序列化为 WinRiver 对象--------------------------------------------");
WinRiver New_WinRiver;
XmlSerializer New_serializer = new XmlSerializer(typeof(WinRiver));// 创建XmlSerializer实例,指定要反序列化的类型
using (FileStream fileStream = new FileStream(ConfigFile, FileMode.Open))
{
New_WinRiver = (WinRiver)New_serializer.Deserialize(fileStream);//将文件流反序列化为 WinRiver 对象
}
Console.WriteLine(New_WinRiver.Project.Name);
Console.WriteLine(New_WinRiver.Project.Version);
Console.WriteLine(New_WinRiver.Project.Flags);
Console.WriteLine(New_WinRiver.Project.Locked);
}
private void SaveProjectMenu_Click(object sender, EventArgs e)
{
WinRiverXML.CreateFile();
}
WinRiver对象序列化为XML字符串----------------控制台显示--------------------
False
汉口水文分局
中国
武汉市
新文件_000.PD0
新文件_000.ASC.TXT
新文件_000.EH.TXT
新文件_000.GPS.TXT
WinRiver对象序列化为XML文件--------------------------------------------
XML 字符串反序列化为 WinRiver 对象--------------------------------------
新文件.MMT
2.24.0.8
0
False
XML 文件反序列化为 WinRiver 对象--------------------------------------------
新文件.MMT
2.24.0.8
0
False
为了减少篇幅,以上代码省略部分,可以自行类推添加完整。程序在框架 .NET Framework、C# 2017编程环境下,测试正确完成。
https://download.csdn.net/download/zyyujq/91445436