原文:在配置文件(.settings、.config)中存储自定义对象


引言

我前面曾写过一篇《使用配置文件(.settings、.config)存储应用程序配置》,我在其中指出“settings无法实现对一些复杂类型及自定义类型的支持”。

而今天我发现其实它是支持自定义类型的,仅仅是不能支持本项目中的自定义类型,可以支持引用的项目或类库的自定义类型。至于为什么不支持本项目中的自定义类型,我也不得而知,猜想可能是怕加载时造成冲突吧。

范例

我们来做一个使用自定义类型的配置文件范例。

首先新建一个类库项目,我这里以SettingTest2命名该项目,然后创建下面这样一个简单的类:

public class MyClass

{

public DateTime time

{

get

{

return _time;

}

set

{

_time = value;

}

}

private DateTime _time;

public int num

{

get

{

return _num;

}

set

{

_num = value;

}

}

private int _num;

}

由目前所知的情况看来,配置文件不支持泛型集合,所以当我们需要存储自定义类型的集合的时候,就要再创建一个用来存放该自定义类型集合的类:

public class MyClassList

{

public List<MyClass> list

{

get

{

return _list;

}

set

{

_list = value;

}

}

private List<MyClass> _list;

}

这样这个类库项目就搞好了,下面再建立一个控制台项目用于测试。

引入刚才的项目:

创建配置文件,建立一个新属性名为“MyClassList”,在其类型列表中点击最下面的“浏览…”,即可在弹出的对话框中找到刚才我们创建的类:

在程序中编写测试代码:

static void Main(string[] args)

{

//初始化随机数生成对象

Random r = new Random();

//验证是否为空,如果为空的话就初始化一下

if (Settings1.Default.MyClassList == null)

{

Settings1.Default.MyClassList = new SettingTest2.MyClassList();

Settings1.Default.MyClassList.list = new List<SettingTest2.MyClass>();

}

//遍历输出所有项

foreach (var f in Settings1.Default.MyClassList.list)

{

Console.WriteLine(string.Format("{0}:{1}", f.num, f.time));

}

Console.Read();

//添加一条新项,并保存配置

Settings1.Default.MyClassList.list.Add(new SettingTest2.MyClass { num = r.Next(1000), time = DateTime.Now });

Settings1.Default.Save();

}

不断运行、关闭程序,以测试配置文件的使用情况:

很完美哈,再来看看生成的配置文件代码:

很好,跟我们自己XML序列化的没多大区别。

结语

这样一来,我们就能以面向对象的方式操作程序配置,又不用自己费力写序列化代码了,请各位善加利用吧:)

另外,关于泛型类型的支持,我觉得应该也是可以的吧,毕竟自定义类型中包含泛型集合的情况都可以被很好地支持,但没找到设置方法,难道说要手动改写配置文件了?期待高手解答。

下载

本文的XPS版本:http://www.uushare.com/user/icesee/file/2273504

在配置文件(.settings、.config)中存储自定义对象的更多相关文章

  1. NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象

    摘要: NSUserDefaults适合存储轻量级的本地数据,一些简单的数据(NSString类型的)例如密码,网址等,NSUserDefaults肯定是首选,但是如果我们自定义了一个对象,对象保存的 ...

  2. Java基础知识强化之集合框架笔记45:Set集合之TreeSet存储自定义对象并遍历练习1(自然排序:Comparable)

    1. 自然排序: TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间的大小关系,然后将集合元素按照升序排列,这种方式就是自然排序. Java中提供了一个Comp ...

  3. Java基础知识强化之集合框架笔记40:Set集合之HashSet存储自定义对象并遍历

    1. HashSet存储自定义对象并遍历 2. 代码示例: (1)Student类,如下: package cn.itcast_02; /** * @author Administrator * */ ...

  4. 《java入门第一季》之HashSet存储自定义对象问题以及注意事项

    上一篇http://blog.csdn.net/qq_32059827/article/details/51578158 写到存储字符串类型的时候出现了无序,而且这个无序不是随机那种无序,它是有一定存 ...

  5. NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象 - lady-奕奕的个人空间 - 开源中国社区

    一.了解NSUserDefaults以及它可以直接存储的类型 NSUserDefaults是一个,在整个程序中只有一个实例对象,他可以用于数据的永久保存,而且简单实用,这是它可以让数据自由传递的一个前 ...

  6. 用HashSet存储自定义对象

      案例 package cn.itcast_02; import java.util.HashSet; /* * 需求:存储自定义对象,并保证元素的唯一性 * 要求:如果两个对象的成员变量值都相同, ...

  7. ArrayList练习之存储自定义对象并遍历

    新建一个Student.java类 Student.java /* * 这是一个学生类 */ public class Student { private String name; private i ...

  8. 转-NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象

    转自:http://my.oschina.net/u/1245365/blog/294449 摘要 NSUserDefaults适合存储轻量级的本地数据,一些简单的数据(NSString类型的)例如密 ...

  9. 30.1 HashSet存储自定义对象 未去重解决

    问题: package day30_HashSet; import java.util.HashSet; /* * 通过hashset存储自定义对象,没有进行去重. * * */ public cla ...

随机推荐

  1. Spring Boot,Spring Data JPA多数据源支持

    1 配置文件 wisely.primary.datasource.driverClassName=oracle.jdbc.OracleDriver wisely.primary.datasource. ...

  2. Google Ads Encryption Key

    aes | floyd's Google Ads Encryption Key

  3. HDU 4691(多校第九场1006) 后缀数组

    ...还能多说什么. 眼角一滴翔滑过. 一直以为题意是当前串与所有之前输入的串的LCP...然后就T了一整场. 扫了一眼标程突然发现他只比较输入的串和上一个串? 我心中突然有千万匹草泥马踏过. 然后随 ...

  4. ubuntu环境ceph配置入门(一)

    环境:ubuntu server 14.04 64bit,安装ceph版本号0.79 正常情况下应有多个主机,这里为了高速入门以一台主机为例,多台主机配置方式类似. 1. 配置静态IP及主机名 静态I ...

  5. D7升级时候发现许多System函数和网络函数只有Byte版本的,需要注意

    SetLength 对于字符串,是WideChar的长度GetMem 只针对ByteMove 只针对ByteFillChar 只针对ByteWriteFile(API) 只针对Byte SetSock ...

  6. myBatis 基础测试 表关联关系配置 集合 测试

    myBatis 基础测试 表关联关系配置 集合 测试 测试myelipse项目源码 sql 下载 http://download.csdn.net/detail/liangrui1988/599388 ...

  7. 循环灯控制器,该控制器控制红、绿、黄三个发光管循环发亮(VHDL语言)

    设计一个循环灯控制器,该控制器控制红.绿.黄三个发光管循环发亮.要求红发光管亮2秒,绿发光管亮3秒,黄发光管亮1秒.(假设外部提供频率为1MHz的方波信号) library ieee; use iee ...

  8. 与众不同 windows phone (21) - Device(设备)之摄像头(拍摄照片, 录制视频)

    原文:与众不同 windows phone (21) - Device(设备)之摄像头(拍摄照片, 录制视频) [索引页][源码下载] 与众不同 windows phone (21) - Device ...

  9. Button UI Kit CSS3美丽Buttonbutton

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  10. iOS学习笔记(十五)——数据库操作(SQLite)

    SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.SQLite最初的设计目标是用于嵌入式系统,它占用资源非常少,在嵌入式设备中,只需要几百K的 ...