最近在做一个pc项目的时候要求在运行的应用中修改相关的xml配置并且保存
如图:
项目根目录和xml层级图
xml数据:
那么如何来修改项目外部的xml文件且保存修改呢呢?闲话不多说上代码
1.先通过反序列化获取到xml的相关数据
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml.Serialization;
[XmlType(TypeName = "SystemSetting")]
public class SystemSetting
{
[XmlElement]
public bool IsDebug = false;
/// <summary>
/// 屏幕分辨率
/// </summary>
[XmlElement]
public ResolutionSetting ResolutionSetting;
/*todo:
* 1.加一个页面,显示日志列表,IsDebug是true时显示。
* 2.加一个位置显示当前是访客模式还是管理模式
*/
/// <summary>
/// 版本信息,就一个版本号
/// </summary>
[XmlElement]
public VersionSetting VersionSetting;
/// <summary>
/// 是否强制全屏
/// </summary>
[XmlElement]
public bool IsFullScreen ;
/// <summary>
/// 是否显示首页
/// </summary>
[XmlElement]
public bool IsShowHomePage=true ;
/// <summary>
/// 是否显示左侧拓补图
/// </summary>
[XmlElement]
public bool IsShowLeftTopo=true;
/// <summary>
/// 是否显示右下角告警推送
/// </summary>
[XmlElement]
public bool IsShowRightDownAlarm=true;
/// <summary>
/// 是否显示右上角统计信息
/// </summary>
[XmlElement]
public bool IsShowRightTopInfo=true;
/// <summary>
/// 摄像头跟随相关参数
/// 【后续随着功能调整会没用】
/// </summary>
[XmlElement]
public CinemachineSetting CinemachineSetting;
/// <summary>
/// 通信相关参数设置
/// </summary>
[XmlElement]
public CommunicationSetting CommunicationSetting;
/// <summary>
/// 刷新间隔时间
/// 1.实时定位信息
/// 2.区域统计数据
/// 3.人员树节点
/// 4.部门树节点刷新
/// 5.附近摄像头界面刷新
/// 6.顶视图截图保存【没什么用,先放着,可以设置成】
/// </summary>
[XmlElement]
public RefreshSetting RefreshSetting;
/// <summary>
/// 霍尼维尔视频设置
/// </summary>
[XmlElement]
public HoneyWellSetting HoneyWellSetting;
/// <summary>
/// 模型动态加载相关设置
/// </summary>
[XmlElement]
public AssetLoadSetting AssetLoadSetting;
/// <summary>
/// 历史轨迹相关设置
/// </summary>
[XmlElement]
public HistoryPathSetting HistoryPathSetting;
/// <summary>
/// 定位相关设置
/// </summary>
[XmlElement]
public LocationSetting LocationSetting;
/// <summary>
/// 调试模式相关设置
/// </summary>
[XmlElement]
public DebugSetting DebugSetting;
/// <summary>
/// 设备加载相关设置
/// 【临时调试用,不显示】
/// </summary>
[XmlElement]
public DeviceSetting DeviceSetting;
/// <summary>
/// 是否显示告警
/// </summary>
[XmlElement]
public AlarmSetting AlarmSetting;
public SystemSetting()
{
ResolutionSetting = new ResolutionSetting();
CinemachineSetting = new CinemachineSetting();
CommunicationSetting = new CommunicationSetting();
VersionSetting = new VersionSetting();
RefreshSetting = new RefreshSetting();
AssetLoadSetting = new AssetLoadSetting();
HoneyWellSetting = new HoneyWellSetting();
DeviceSetting = new DeviceSetting();
HistoryPathSetting = new HistoryPathSetting();
LocationSetting = new LocationSetting();
DebugSetting = new DebugSetting();
AlarmSetting = new AlarmSetting();
}
}
2.修改xml相关的数据
这边有了所有的相应的对象和属性之后就可以修改了,做个简单的事例。
SystemSettingHelper.systemSetting.IsShowLeftTopo = false;
IsShowLeftTopo 就是xml中的一个数据,其他数据同理修改即可
3.保存修改内容
/// <summary>
/// 保存系统设置
/// </summary>
public static void SaveSystemSetting()
{
string path = Application.dataPath + ConfigPath;
try
{
SerializeHelper.Save(systemSetting, path);
}
catch (Exception ex)
{
Debug.LogError(ex.ToString());
}
}
序列化
/// <summary>
/// 将对象保存到文件中
/// </summary>
/// <param name="obj"></param>
/// <param name="fileName"></param>
public static void Save(object obj, string fileName)
{
//Serialize(obj, fileName);
Save(obj, fileName, Encoding.UTF8);
}
/// <summary>
/// 将对象保存到文件中
/// </summary>
/// <param name="obj"></param>
/// <param name="fileName"></param>
/// <param name="encoding"></param>
public static void Save(object obj, string fileName, Encoding encoding)
{
CreateFileSDirectory(fileName);
string text = GetXmlText(obj, encoding);
File.WriteAllText(fileName, text, encoding);
}
前后效果如图
至此我们就已经做完了获取xml数据修改并保存的所有步骤了。