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,后续都将在新地址更新。



  • 相关阅读:
    Power BI for Office 365(八)共享查询
    Power BI for Office 365(七) Power BI站点
    Power BI for Office 365(六)Power Map简介
    Power BI for Office 365(五)Power View第二部分
    Power BI for Office 365(四)Power View第一部分
    Power BI for Office 365(三)Power Pivot
    Power BI for Office 365(二)Power Query
    java 继承、重载、重写与多态
    Android 热修复方案Tinker(一) Application改造
    阿里最新热修复Sophix与QQ超级补丁和Tinker的实现与总结
  • 原文地址:https://www.cnblogs.com/SkyD/p/1614121.html
Copyright © 2011-2022 走看看