您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

Xml序列化

时间:2021-02-18 12:21:37  来源:  作者:

在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即可。



Tags:Xml   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
我们通常习惯用Json、XML等形式的数据存储格式,但相信还有很多人没有听说过Protocol Buffer(简称protobuf)。protobuf是Google开源的一个语言无关、平台无关的通信协议,其小巧、...【详细内容】
2021-08-13  Tags: Xml  点击:(69)  评论:(0)  加入收藏
一、前言server.xml 配置,是 Tomcat启动配置,从配置结构可以看出 Tomcat 的整体架构。如果能够了解其常用配置项,对 Tomcat有一个高屋建瓴的把握,然后再庖丁解牛,一步步深入源码...【详细内容】
2021-07-04  Tags: Xml  点击:(86)  评论:(0)  加入收藏
背景日常工作中,项目编程免不了需要使用配置文件,早期yaml出现之前,大部分配置文件采用xml形式,但是以xml格式储存的数据要比以其他格式(如json、yaml)储存占有的空间要大得多,因为...【详细内容】
2021-06-21  Tags: Xml  点击:(265)  评论:(0)  加入收藏
Json 和 Xml 的目的是相似的,他们都是将方便理解和易读的方式将复杂数据组织到各种接口和语言中,这种类型的技术当然是不能缺少的,我们通过他们构建数据也能很好的去共享他们,但...【详细内容】
2021-06-04  Tags: Xml  点击:(129)  评论:(0)  加入收藏
XML; 是什么? Extensible Markup Languare 可扩展标记型语言 为什么要有XML? 1.HTML的标签是固定的,不可以改变,也不可以进行一个···扩展 2.HTML语法松散...【详细内容】
2021-06-01  Tags: Xml  点击:(193)  评论:(0)  加入收藏
1.创建Springboot项目开发工具我们采用IntelliJ IDEA,环境安装不在叙述,如果对环境搭建不会的朋友,可以评论或私聊,本人后期在写一章环境搭建,mysql安装的文章: 打开IntelliJ IDEA...【详细内容】
2021-03-08  Tags: Xml  点击:(193)  评论:(0)  加入收藏
在2010年之前,XML是最流行的数据交换标准,直至今天,仍然有许多系统使用XML交换数据。NewLife.Core 很早就提供了XML序列化支持,主要用于配置文件。Nuget包:NewLife.Core源码地址:h...【详细内容】
2021-02-18  Tags: Xml  点击:(193)  评论:(0)  加入收藏
MyBatis 提供了XML配置和注解配置两种方式。今天就来搞搞这两种方式是如何实现的。MyBatis 的真正强大在于它的语句映射,这是它的魔力所在。由于它的异常强大,映射器的 XML 文...【详细内容】
2020-12-11  Tags: Xml  点击:(185)  评论:(0)  加入收藏
概念什么是MavenMaven 是 Apache 软件基金会组织维护的一款自动化构建工具,专注服务于 Java 平台的项目构建和依赖管理。Maven 这个单词的本意是:专家,内行。读音是[‘me...【详细内容】
2020-10-27  Tags: Xml  点击:(49)  评论:(0)  加入收藏
最近学习java反序列化学到了weblogic部分,weblogic之前的两个反序列化漏洞不涉及T3协议之类的,只是涉及到了XMLDecoder反序列化导致漏洞,但是网上大部分的文章都只讲到了触发XMLDecoder部分就结束了,并没有讲为什么XMLDec...【详细内容】
2020-08-20  Tags: Xml  点击:(122)  评论:(0)  加入收藏
▌简易百科推荐
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(1)  评论:(0)  加入收藏
程序是如何被执行的  程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(9)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(19)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(23)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(24)  评论:(0)  加入收藏
一个项目的大部分API,测试用例在参数和参数值等信息会有很多相似的地方。我们可以复制API,复制用例来快速生成,然后做细微调整既可以满足我们的测试需求1.复制API:在菜单发布单...【详细内容】
2021-12-14  AutoMeter    Tags:AutoMeter   点击:(20)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条