zoukankan      html  css  js  c++  java
  • 在配置文件(.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;

    }

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

    引入刚才的项目:

    image

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

    image

    在程序中编写测试代码:

    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();

    }

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

    image

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

    image

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

    结语

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

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

    下载

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

    注意:此博客已停止更新,并迁移至blog.SkyDev.cc,后续都将在新地址更新。



  • 相关阅读:
    SharedPreferences
    SQLiteOpenHelper
    JavaScript常用对象的方法和属性
    sublime 中文乱码
    windows 7 右下角登陆信息去除
    第七篇T语言实例开发,文本与程序的几种打开方法(版5.3)
    第六篇T语言实例开发,多点找色应用
    第五篇T语言实例开发,数组空间使用
    PHP实例开发(3)PHP中MVC学习之ThinkPHP
    第五篇T语言实例开发,百变字符(版本5.0)
  • 原文地址:https://www.cnblogs.com/SkyD/p/1614121.html
Copyright © 2011-2022 走看看