原文:在配置文件(.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. 4. Qt的容器类

      Qt提供来一组通用的基于模板的容器类. 一. QList类,QLinkedList类 和  QVector类         QList类.QLinkedList类和QVector类常常使用到的Q ...

  2. android.graphics.Color

    该类定义的都是些static常量和函数,这些函数都是为了创建和转化成int型的color.颜色是由int型的数表示,由4个字节组成,分别是A R  G  B,这个int型的值是确定的,透明度的值只能存 ...

  3. vc 在edit控件中动态插入数据滚动显示

    内存从网上论坛摘抄整理 思路:给控件设置多行属性,设置垂直滚动条,Auto Vscroll设置为true,放入文本后把插入点设置到末尾 pEdit->LineScroll(pEdit->G ...

  4. 【WPF】监听WPF的WebBrowser控件弹出新窗口的事件

    原文:[WPF]监听WPF的WebBrowser控件弹出新窗口的事件 WPF中自带一个WebBrowser控件,当我们使用它打开一个网页,例如百度,然后点击它其中的链接时,如果这个链接是会弹出一个新窗 ...

  5. 深入理解 JBoss 7/WildFly Standalone 模式启动过程

    概述 JBoss 7/WildFly Standalone 模式启动过程大致例如以下: 启动脚本 standalone.sh 启动 JBoss Modules,JBoss Modules 启动 JBo ...

  6. 《Struts2技术内幕》学习笔记

    第2.3章 基础 三种类模式:属性-行为模式.属性模式.行为模式. 其中属性模式有:PO(持久化对象).BO(业务对象).VO(值对象).DTO(传输数据对象).FromBean(页面对象)他们是对J ...

  7. Web API设计

    Web API设计经验与总结 在移动互联网的时代, Web服务已经成为了异构系统之间的互联与集成的主要手段,各种 Web服务几乎都采用REST风格的Web Api来构建. 通过Http协议的形式来. ...

  8. HDU 1142 A Walk Through the Forest(dijkstra+记忆化DFS)

    题意: 给你一个图,找最短路.但是有个非一般的的条件:如果a,b之间有路,且你选择要走这条路,那么必须保证a到终点的所有路都小于b到终点的一条路.问满足这样的路径条数 有多少,噶呜~~题意是搜了解题报 ...

  9. POJ2421 & HDU1102 Constructing Roads(最小生成树)

    嘎唔!~又一次POJ过了HDU错了...不禁让我想起前两天的的Is it a tree?   orz..这次竟然错在HDU一定要是多组数据输入输出!(无力吐槽TT)..题目很简单,炒鸡水! 题意: 告 ...

  10. AngularJs打造一个简易权限系统

    AngularJs打造一个简易权限系统 一.引言 上一篇博文已经向大家介绍了AngularJS核心的一些知识点,在这篇博文将介绍如何把AngularJs应用到实际项目中.本篇博文将使用AngularJ ...