引言

我前面曾写过一篇《使用配置文件(.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

本文转自斯克迪亚博客园博客,原文链接:http://www.cnblogs.com/SkyD/archive/2009/11/30/1614121.html,如需转载请自行联系原作者

在配置文件(.settings、.config)中存储自定义对象相关推荐

  1. 集合中存储自定义对象源代码

    集合中存储自定义对象: package attention;import java.util.ArrayList; import java.util.Collection; import java.u ...

  2. 本实例演示往TreeSet集合中存储自定义对象

    1 package JiHe.Set; 2 3 import java.util.Iterator; 4 import java.util.TreeSet; 5 6 /* 7 * 本实例演示往Tree ...

  3. java基础—TreeSet集合中储存自定义对象(java集合二)

    TreeSet集合中储存学生对象,按照其年龄进行排序 TreeSet对元素进行排序的方式一: 让元素自身具备比较功能,元素就需要实现Comparable接口,覆盖compareTo方法. TreeSe ...

  4. 站在巨人的肩膀上-像kubernetes一样用etcd存储自定义对象

    背景 众所周知,kubernetes利用etcd存储API对象,例如Pod.Deployment.StatefulSet等等.笔者认为kubernetes这种API对象的设计方案当前来看非常先进,基于 ...

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

    2019独角兽企业重金招聘Python工程师标准>>> 一.了解NSUserDefaults以及它可以直接存储的类型 NSUserDefaults是一个单例,在整个程序中只有一个实例 ...

  6. iOS NSUserDefaults 简介 NSUserDefaults 存储自定义对象

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

  7. HashSet存储自定义对象保证元素唯一性图解原理及代码优化

    HashSet存储自定义对象保证元素唯一性图解原理及代码优化 1.原理: * 1.HashSet原理       * 我们使用Set集合都是需要去掉重复元素的, 如果在存储的时候逐个equals()比 ...

  8. android sqlite存对象,【Android基础】Android SQLite存储自定义对象

    Android SQLite存储自定义对象 在SQLite数据库中可存储的数据类型有NULL.INTEGER.REAL(浮点型).TEXT.BOOL,一共是五种数据类型.在Android开发中,我们存 ...

  9. 通过YYCache存储自定义对象

    如果保存的自定义对象不遵守NSCoding的协议或不实现NSCoding协议的方法,就不能使用YYDiskCache进行长期缓存.(原来所有原生的类都是实现了NSCoding协议,在归档的过程中进行了 ...

最新文章

  1. linux 获取内核线程数,如何从命令行获取Linux中的CPU /内核数量?
  2. exec sp_prepare @P1 output
  3. 【论文解读】用Dropout思想做特征选择保证效果,还兼顾了线上性能?
  4. 事件映射 消息映射_映射幻影收费站
  5. php js 循环对象属性,js 遍历对象的属性的代码_javascript技巧
  6. java 保存的代码怎么写_java实现写入并保存txt文件的示例代码
  7. python文件读写方法手机,python文本文件读写的3种方法
  8. myeclipse 8.6安装freemarker插件
  9. atitit 完整的知识体系表 学科体系表 v2
  10. 中兴iptv机顶盒破解教程图文:亲测中兴B760EV3、B860A、B860AV1.1完美安装应用!非ttl破解![转]
  11. smtplib 抄送邮件_Smtp发送及抄送邮件
  12. 机器人学回炉重造(1):正运动学、标准D-H法与改进D-H法的区别与应用(附ABB机械臂运动学建模matlab代码)
  13. 03.设计模式之工厂模式
  14. 基于PHP+MySQL客户信息管理系统的设计与实现
  15. php theexcerpt,WordPress获取文章摘要函数the_excerpt、get_the_excerpt
  16. ODOO实现微信单点登入
  17. ListView和条目点击事件、条目长按事件
  18. C#操作Word模板并且修改书签
  19. linux内核是干什么,linux内核开发工程师
  20. 南京航空航天大学计算机孙涵,南航计算机科学与技术学院导师介绍:孙涵

热门文章

  1. hdu2716水水哈希
  2. socks5协议RFC文档
  3. 异常“企图释放并非呼叫方所拥有的多用户终端运行程序”的处理
  4. PHP 正则表达式 最后总结
  5. c从sqlite3数据库中获取数据,并对数据进行拼接
  6. MYSQL密码解密函数的使用
  7. 2019春季学期进度报告(十六)
  8. 转:深入理解Java G1垃圾收集器
  9. Xcode的Architectures、Valid Architectures和Build Active Architecture Only属性
  10. Windows Phone 网络HttpWebRequest用法