.NET平台开源项目速览(1)SharpConfig配置文件读写组件

简介:

  在.NET平台日常开发中,读取配置文件是一个很常见的需求。以前都是使用System.Configuration.ConfigurationSettings来操作,这个说实话,搞起来比较费劲。不知道大家有没有同感。所以更多时候我还是喜欢使用开源的东西,更加方便简洁,也稳定。省去自己的麻烦。今天就介绍一个非常精致的.NET平台开源的操作配置文件(cfg/ini)的组件SharpConfig。走过路过,千万不要错过!上周我在这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧一文中也介绍过项目。我将会重点对部分开源项目进行深入的研究,形成“.NET平台开源项目速览”系列文章,该系列文章没有时间限制,会一直持续更新下去。

.NET开源目录:【目录】本博客其他.NET开源项目文章目录

 本文原文地址:.NET平台开源项目速览(1)SharpConfig配置文件读写组件

1.SharpConfig简介

    SharpConfig是.NET平台一个使用非常简单的处理Cfg/ini配置文件的类库。

    项目主页:https://github.com/cemdervis/SharpConfig,目前最新版本是1.4.3;

    Nuget包主页:https://www.nuget.org/packages/sharpconfig/,其主要功能有:

    1.支持的配置文件类型有cfg,ini格式;

    2.支持注释功能,使用 # 符号开头;

    3.支持直接读取和写入指定节点的值;

    4.支持枚举,数组,以及和实体的直接映射;

    5.支持内存的创建和使用,相对一个配置类型,直接在代码中初始化和使用;

2.SharpConfig基本使用

    下面通过一个简单的Demo来大概知道如何使用。下载后,解压,新建项目,添加dll引用,需要添加命名空间:

1
using  SharpConfig;

    我们添加一个如下格式的文件,文件名称为:example.ini,这个文件可以手动创建放在项目中,设置属性:“始终复制”即可,或者自己手动复制到bin目录也行。方便调用,放在其他路径也可以,最终都是fileName的路径来找文件的。example.ini的内容如下,这个例子也是项目主页的例子,我稍微修改了下:

[General] #这代表Section,也就是节点

SomeString = Hello SharpConfig!

SomeInteger = 10 #这里也是注释

SomeFloat = 20.05

ABoolean = true

    下面使用代码直接读取这个配置文件的值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
static  void  Test1()
{
     //按文件名称加载配置文件
     Configuration config = Configuration.LoadFromFile( "example.ini" );
     //按照节的名称读取节
     Section section = config[ "General" ];
     //依次根据每个配置项的名称来读取,如果配置文件类型搞错了,会报错
     string  someString = section[ "SomeString" ].Value;
     var  someInteger = section[ "SomeInteger" ].GetValue<Boolean>();
     float  someFloat = section[ "SomeFloat" ].GetValue< float >();
     Boolean someBool = section[ "ABoolean" ].GetValue<Boolean>();
     Console.WriteLine( "当前节名称:{0}" ,section.Name );
     Console.WriteLine( "字符串SomeString值:{0}" , someString);
     Console.WriteLine( "整数someInteger值:{0}" , someInteger);
     Console.WriteLine( "双精度someFloat值:{0}" , someFloat);
     Console.WriteLine( "布尔值someBool值:{0}" , someBool);
}

结果如下:

blob.png保存配置文件有以下一些方法:

1
2
3
4
myConfig.Save(  "myConfig.cfg"  );  // 保存到cfg格式的文本文件
myConfig.Save( myStream );  //保存到文本流中
myConfig.SaveBinary(  "myConfig.cfg"  );  //保存到cfg格式的二进制文件
myConfig.SaveBinary( myStream );  // 保存到二进制文件

    是不是很简单,速度也很快。下面看看其他功能的使用。上面只是一个最基本的使用例子。

3.特殊数据类型的配置项目

3.1 枚举类型

    枚举类型的支持其实和上面的值类型差不多,也是直接使用泛型的类型参数类获取枚举,而数组是相对特殊一点的,所以单独拿出来给大家介绍。

    假设有一个Section名称为DateInfo,项目的Day有一个Monday值,是枚举类型DayOfWeek的一个值。如下面所示:

    [DateInfo]

    Day = Monday

    调用的时候,使用一个枚举类型DayOfWeek 来读取:

1
DayOfWeek day = config[ "DateInfo" ][ "Day" ].GetValue<DayOfWeek>();

3.2 数组类型

    数组类型的支持,首先是统一转换为object数组,然后根据自己的需求要手动转换,其实可以写一个扩展方法,很简单,就不展开了。例如下面有一个节的项目是:

    [General]

    MyArray = {0,2,5,6}

    读取的方法为:

1
object [] myArray = config[ "General" ][ "MyArray" ].GetValue< object []>();

4.动态创建配置文件与使用

    动态在内存中创建配置文件,其实就是把Configuration当作一个实体类一样,在代码中创建和使用。例如下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
static  void  Test2()
{
     var  myConfig =  new  Configuration();
     //节点Video
     myConfig[ "Video" ][ "Width" ].Value =  "1920" ;
     myConfig[ "Video" ][ "Height" ].Value =  "1080" ;
     //设置数组
     myConfig[ "Video" ][ "Formats" ].SetValue( new  string [] {  "RGB32" "RGBA32"  });
     //可以使用循环获取节点以及节点的所有项目,进行操作
     foreach  var  section  in  myConfig )
     {
         foreach  var  setting  in  section )
         {
             //TODO:
         }
     }
     //也可以直接使用节点和项目的名称来访问:
     Console.WriteLine( "Width:{0}" , myConfig[ "Video" ][ "Width" ].GetValue<Int32>());
     Console.WriteLine( "Height:{0}" , myConfig[ "Video" ][ "Height" ].GetValue<Int32>());
}

  结果如下:

5.更简单的应用-对象映射

  在文章发表之前,我在“这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧”一文中已经提到该项目,网友回复如果字符串中包括了#字符,可能会被认为是注释的事情,这个的确是一个隐藏bug,不过应该很少会碰到,这个解决方案自己绕过弯吧,真的有,就在程序或者使用实体类映射的时候,单独处理一下。

    这种情况在以前使用XCode组件时用的比较多。不过SharpConfig也支持,挺好用的。相当于把实体类的字段和配置文件对应起来,可以更加方便使用。类型和配置文件映射后,可以直接操作对象了。不需要上面那些步骤。假设有一个Person对象,如下格式:

1
2
3
4
5
6
public  class  Person
{
     public  string  Name {  get set ; }
     public  int  Age {  get set ; }
     public  Gender Gender {  get set ; }
}

Gender是一个性别的枚举类型,如下所示:

1
2
3
4
5
enum  Gender
{
     Male,
     Female
}

假设配置文件是这样保存的:

[Person]

Name = Peter

Age = 50

Gender = Male

    在实际使用的时候,使用下面的代码即可:

1
2
3
4
5
6
7
8
static  void  Test3()
{
     Configuration config = Configuration.LoadFromFile( "example.ini" );
     Person person = config[ "Person" ].CreateObject<Person>();
     Console.WriteLine( "Name:{0}" ,person.Name);
     Console.WriteLine( "Age:{0}" , person.Age);
     Console.WriteLine( "Gender:{0}" , person.Gender);
}

结果如下:

blob.png

   当然也可以将config["Person"]节直接映射对一个已经存在的对象,会直接覆盖原来的值。如下面代码:

1
config[ "Person" ].MapTo(person);  

6.资源

    大家可以从项目主页:https://github.com/cemdervis/SharpConfig下面源代码。亲,

    我在这里提供一个下载,以及我使用的案例Demo例子。官方提供了一个Winform的图形界面,非常直观,这里截图看看,如果大家要用,从我这里下载也可以。

    源码下载:http://files.cnblogs.com/files/asxinyu/SharpConfig-master.rar

  编译4.0dll下载:SharpConfig.rar

    Winform显示配置文件的图形界面

blob.png 


本文转自叶小钗 h数据之巅博客园博客,原文链接:http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_SharpConfig.html,如需转载请自行联系原作者




如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
相关文章
|
23天前
|
Linux API C#
基于 .NET 开发的多功能流媒体管理控制平台
基于 .NET 开发的多功能流媒体管理控制平台
38 9
|
2月前
|
机器学习/深度学习 人工智能 Cloud Native
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台。本文深入解析 .NET 的核心优势,探讨其在企业级应用、Web 开发及移动应用等领域的应用案例,并展望未来在人工智能、云原生等方面的发展趋势。
49 3
|
2月前
|
存储 设计模式 编解码
.NET 8.0 通用管理平台,支持模块化、WinForms 和 WPF
【11月更文挑战第5天】本文分析了.NET 8.0 通用管理平台在模块化、WinForms 和 WPF 方面的优势。模块化设计提升了系统的可维护性和可扩展性,提高了代码复用性;WinForms 提供了丰富的控件库和简单易用的开发模式,技术成熟稳定;WPF 支持强大的数据绑定和 MVVM 模式,具备丰富的图形和动画功能,以及灵活的布局系统。
|
3月前
.NET 4.0下实现.NET4.5的Task类相似功能组件
【10月更文挑战第29天】在.NET 4.0 环境下,可以使用 `BackgroundWorker` 类来实现类似于 .NET 4.5 中 `Task` 类的功能。`BackgroundWorker` 允许在后台执行耗时操作,同时不会阻塞用户界面线程,并支持进度报告和取消操作。尽管它有一些局限性,如复杂的事件处理模型和不灵活的任务管理方式,但在某些情况下仍能有效替代 `Task` 类。
|
5月前
|
开发者 API Windows
从怀旧到革新:看WinForms如何在保持向后兼容性的前提下,借助.NET新平台的力量实现自我进化与应用现代化,让经典桌面应用焕发第二春——我们的WinForms应用转型之路深度剖析
【8月更文挑战第31天】在Windows桌面应用开发中,Windows Forms(WinForms)依然是许多开发者的首选。尽管.NET Framework已演进至.NET 5 及更高版本,WinForms 仍作为核心组件保留,支持现有代码库的同时引入新特性。开发者可将项目迁移至.NET Core,享受性能提升和跨平台能力。迁移时需注意API变更,确保应用平稳过渡。通过自定义样式或第三方控件库,还可增强视觉效果。结合.NET新功能,WinForms 应用不仅能延续既有投资,还能焕发新生。 示例代码展示了如何在.NET Core中创建包含按钮和标签的基本窗口,实现简单的用户交互。
93 0
|
23天前
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
|
4月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
56 7
|
4月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
102 0
|
5月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
75 0
|
5月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?

热门文章

最新文章