在2010年之前,XML是最流行的數據交換標準,直至今天,仍然有許多系統使用XML交換數據。NewLife.Core 很早就提供了XML序列化支持,主要用于配置文件。
Nuget包:NewLife.Core
源碼地址:https://github.com/NewLifeX/X/tree/master/NewLife.Core/Serialization/Xml
基本用法
NewLife.Serialization.Xml 類主要成員如下:
/// 深度
publicInt32Depth{get;set; }
/// 處理器列表
publicListHandlers{get; }
/// 使用特性
publicBooleanUseAttribute{get;set; }
/// 使用注釋
publicBooleanUseComment{get;set; }
/// 當前名稱
publicStringCurrentName{get;set; }
// 寫入一個對象
BooleanWrite(Objectvalue,Stringname=null,Typetype=null);
// 讀取指定類型對象
ObjectRead(Typetype);
TRead();
BooleanTryRead(Typetype,refObjectvalue);
Xml配置文件
Xml至今仍然是很多系統配置文件的優(yōu)先選擇,最主要是因為它支持注釋。
先來看一個SysConfig配置類的文件內容:
它的模型類是這樣的:
/// 系統設置。提供系統名稱、版本等基本設置
[DisplayName("系統設置")]
publicclassSysConfig:XmlConfig
{
#region屬性
/// 系統名稱
[DisplayName("系統名稱")]
[Description("用于標識系統的英文名")]
publicStringName{get;set; }="";
/// 系統版本
[DisplayName("系統版本")]
publicStringVersion{get;set; }="";
/// 顯示名稱
[DisplayName("顯示名稱")]
[Description("用戶可見的名稱")]
publicStringDisplayName{get;set; }="";
/// 公司
[DisplayName("公司")]
publicStringCompany{get;set; }="";
/// 應用實例。單應用多實例部署時用于唯一標識實例節(jié)點
[DisplayName("應用實例。單應用多實例部署時用于唯一標識實例節(jié)點")]
publicInt32Instance{get;set; }
/// 開發(fā)者模式
[DisplayName("開發(fā)者模式")]
publicBooleanDevelop{get;set; }=true;
/// 啟用
[DisplayName("啟用")]
publicBooleanEnable{get;set; }=true;
/// 安裝時間
[DisplayName("安裝時間")]
publicDateTimeInstallTime{get;set; }=DateTime.Now;
#endregion
#region方法
/// 加載后觸發(fā)
protectedoverridevoidOnLoaded()
{
if(IsNew)
{
varasmx=SysAssembly;
Name=asmx?.Name??"NewLife.Cube";
Version=asmx?.Version??"0.1";
DisplayName=(asmx?.Title??asmx?.Name)??"魔方平臺";
Company=asmx?.Company??"新生命開發(fā)團隊";
//Address = "新生命開發(fā)團隊";
if(DisplayName.IsNullOrEmpty())DisplayName="系統設置";
}
// 本地實例,取IPv4地址后兩段
if(Instance
{
try
{
varip=NetHelper.MyIP();
varbuf=ip.GetAddressBytes();
Instance=(buf[2]
}
catch
{
// 異常時隨機
Instance=Rand.Next(1,1024);
}
}
base.OnLoaded();
}
/// 系統主程序集
publicstaticAssemblyXSysAssembly
{
get
{
try
{
varlist=AssemblyX.GetMyAssemblies();
// 最后編譯那一個
list=list.OrderByDescending(e=>e.Compile)
.ThenByDescending(e=>e.Name.EndsWithIgnoreCase("Web"))
.ToList();
returnlist.FirstOrDefault();
}
catch{returnnull; }
}
}
#endregion
}
配置類需要繼承 XmlConfig 基類,然后直接通過靜態(tài)屬性Current讀寫:
// 讀取
varset=SysConfig.Current;
varname=set.Name;
// 保存
set.DisplayName="星塵服務";
set.Save();
如果配置文件不存在,會自動創(chuàng)建新文件,并寫入默認值;
如果配置文件字段有增減,或者注釋內容有改變,下一次讀寫時自動覆蓋;
總結
當今最流行數據交換格式是Json,幾乎沒有新系統繼續(xù)使用Xml作為數據交換。
新的配置系統獨立實現了Xml讀寫,也不再需要這里的Xml序列化,作為兼容,只需要把基類從XmlConfig修改為Config即可。