<返回更多

Xml序列化

2021-02-18    
加入收藏

在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至今仍然是很多系统配置文件的优先选择,最主要是因为它支持注释。

先来看一个SysConfig配置类的文件内容:

它的模型类是这样的:

/// 系统设置。提供系统名称、版本等基本设置

[DisplayName("系统设置")]

publicclassSysConfig:XmlConfig

{

#region属性

/// 系统名称

[DisplayName("系统名称")]

[Description("用于标识系统的英文名")]

publicStringName{get;set; }="";

/// 系统版本

[DisplayName("系统版本")]

publicStringVersion{get;set; }="";

/// 显示名称

[DisplayName("显示名称")]

[Description("用户可见的名称")]

publicStringDisplayName{get;set; }="";

/// 公司

[DisplayName("公司")]

publicStringCompany{get;set; }="";

/// 应用实例。单应用多实例部署时用于唯一标识实例节点

[DisplayName("应用实例。单应用多实例部署时用于唯一标识实例节点")]

publicInt32Instance{get;set; }

/// 开发者模式

[DisplayName("开发者模式")]

publicBooleanDevelop{get;set; }=true;

/// 启用

[DisplayName("启用")]

publicBooleanEnable{get;set; }=true;

/// 安装时间

[DisplayName("安装时间")]

publicDateTimeInstallTime{get;set; }=DateTime.Now;

#endregion

#region方法

/// 加载后触发

protectedoverridevoidOnLoaded()

{

if(IsNew)

{

varasmx=SysAssembly;

Name=asmx?.Name??"NewLife.Cube";

Version=asmx?.Version??"0.1";

DisplayName=(asmx?.Title??asmx?.Name)??"魔方平台";

Company=asmx?.Company??"新生命开发团队";

//Address = "新生命开发团队";

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 基类,然后直接通过静态属性Current读写:

// 读取

varset=SysConfig.Current;

varname=set.Name;

// 保存

set.DisplayName="星尘服务";

set.Save();

如果配置文件不存在,会自动创建新文件,并写入默认值;

如果配置文件字段有增减,或者注释内容有改变,下一次读写时自动覆盖;

总结

当今最流行数据交换格式是Json,几乎没有新系统继续使用Xml作为数据交换。

新的配置系统独立实现了Xml读写,也不再需要这里的Xml序列化,作为兼容,只需要把基类从XmlConfig修改为Config即可。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>