c# - 如何从 app.config 中读取自定义对象列表

标签 c# configuration settings app-config

我在 app.config 中定义了自定义设置,但在阅读该部分时出现错误。它使用简单的结构,比如只读取一个配置文件,但一旦我有一个配置文件列表,它就会失败并出现错误:“未知元素“配置文件””。谁能告诉我我做错了什么?

这是我的 app.config 的一部分:

<?xml version="1.0"?>
<configuration>
  <configSections>
   <section name="DTester.Properties.ProfileSection" type="DTester.Settings.ProfileSection, DTester"/>
  </configSections>

    <DTester.Properties.ProfileSection>
        <profiles>
            <profile site="test1" urlscheme="http" urldomain="localhost">
                <dataSource dataSource="test2" databaseName="test1" dbUserName="test1" dbUserPassword="test1" />
                <user userName="test" password="test" TOHSoftwareVersion="8" iOSVersion="3" deviceUDID="12312"/>
            </profile>

            <profile site="test2" urlscheme="http" urldomain="localhost" >
                <dataSource dataSource="test2" databaseName="test2" dbUserName="test2" dbUserPassword="test2" />
                <user userName="test" password="test" TOHSoftwareVersion="3" iOSVersion="8" deviceUDID="123122"/>
            </profile>
        </profiles>
    </DTester.Properties.ProfileSection>

  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
</configuration>

这是我的类(class)

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Configuration;


    namespace DTester.Settings
    {

      public class Profile : ConfigurationElement
    {
        [ConfigurationProperty("profile")]
        public ProfileElem profile
        {
            get
            {
                return this["profile"] as ProfileElem;
            }

            set
            {
                this["profile"] = value;
            }

        }
      }
    }


    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Configuration;

    namespace DTester.Settings
    {
        [ConfigurationCollection(typeof(ProfileSection))]
        public class ProfileCollection : ConfigurationElementCollection
        {

            public Profile this[int index]
            {    
                get
                {
                    return base.BaseGet(index) as Profile;
                }
            }


            protected override ConfigurationElement CreateNewElement()
            {
                return new Profile();
            }

            protected override object GetElementKey(ConfigurationElement element)
            {
                return ((Profile)(element)).profile.site;
            }
        }
    }

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Configuration;


    namespace DTester.Settings
    {

      public class ProfileElem : ConfigurationElement
    {
        [ConfigurationProperty("site", IsRequired = true)]
        public string site
        {
            get
            {
                return this["site"] as string;
            }

            set
            {
                this["site"] = value;
            }

        }

        [ConfigurationProperty("urlscheme", IsRequired = true)]
        public string urlscheme
        {
            get
            {
                return this["urlscheme"] as string;
            }

            set
            {
                this["urlscheme"] = value;
            }
        }

        [ConfigurationProperty("urldomain", IsRequired = true)]
        public string urldomain
        {
            get
            {
                return this["urldomain"] as string;
            }

            set
            {
                this["urldomain"] = value;
            }
        }

        [ConfigurationProperty("dataSource", IsRequired = true)]
        public DataSource dataSource
        {
            get
            {
                return this["dataSource"] as DataSource;
            }

            set
            {
                this["dataSource"] = value;
            }
        }

        [ConfigurationProperty("user", IsRequired = true)]
        public UserConfig user
        {
            get
            {
                return this["user"] as UserConfig;
            }

            set
            {
                this["user"] = value;
            }
        }

      }
    }
using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;

namespace DTester.Settings
{

  public class DataSource : ConfigurationElement
  {   
    [ConfigurationProperty("dataSource", IsRequired = true)]
    public string dataSource
    {
        get
        {
            return this["dataSource"] as string;
        }

        set
        {
            this["dataSource"] = value;
        }
    }

    [ConfigurationProperty("databaseName", IsRequired = true)]
    public string databaseName
    {
        get
        {
            return this["databaseName"] as string;
        }

        set
        {
            this["databaseName"] = value;
        }
    }


    [ConfigurationProperty("dbUserName", IsRequired = true)]
    public string dbUserName
    {
        get
        {
            return this["dbUserName"] as string;
        }

        set
        {
            this["dbUserName"] = value;
        }
    }

    [ConfigurationProperty("dbUserPassword", IsRequired = true)]
    public string dbUserPassword
    {
        get
        {
            return this["dbUserPassword"] as string;
        }

        set
        {
            this["dbUserPassword"] = value;
        }
    }
  }
}

using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;

namespace DTester.Settings
{
    public class UserConfig : ConfigurationElement
    {
        [ConfigurationProperty("userName", IsRequired = true)]
        public string userName
        {
            get
            {
                return this["userName"] as string;
            }

            set
            {
                this["userName"] = value;
            }
        }

        [ConfigurationProperty("password", IsRequired = true)]
        public string password
        {
            get
            {
                return this["password"] as string;
            }

            set
            {
                this["password"] = value;
            }
        }

        [ConfigurationProperty("TOHSoftwareVersion", IsRequired = true)]
        public string TOHSoftwareVersion
        {
            get
            {
                return this["TOHSoftwareVersion"] as string;
            }

            set
            {
                this["TOHSoftwareVersion"] = value;
            }
        }

        [ConfigurationProperty("iOSVersion", IsRequired = true)]
        public string iOSVersion
        {
            get
            {
                return this["iOSVersion"] as string;
            }

            set
            {
                this["iOSVersion"] = value;
            }
        }

        [ConfigurationProperty("deviceUDID", IsRequired = true)]
        public string deviceUDID
        {
            get
            {
                return this["deviceUDID"] as string;
            }

            set
            {
                this["deviceUDID"] = value;
            }
        }
    }
}

最佳答案

我用这个工具得到了响应 https://nconfiggen.codeplex.com/wikipage?title=Example2&referringTitle=Home

这是修改后的配置部分:

<DTesterConfiguration>
            <option cmpResWithOacis="true" valRecentRosterPat="false"  maxPatCount="1" maxResCount="3" maxDetCount="3" />
            <profiles defaultProfile="test1">
                <profile site="test1" urlscheme="http" urldomain="localhost">
                    <dataSource dataSource="test2" databaseName="test1" dbUserName="test1" dbUserPassword="test1" />
                    <user userName="test" password="test" TOHSoftwareVersion="dfdf" iOSVersion="dfdf" deviceUDID="dfdf"/>
                </profile>

                <profile site="test2" urlscheme="http" urldomain="localhost" >
                    <dataSource dataSource="test2" databaseName="test2" dbUserName="test2" dbUserPassword="test2" />
                    <user userName="test" password="test" TOHSoftwareVersion="dfdf" iOSVersion="dfdf" deviceUDID="dfdfdf"/>
                </profile>

            </profiles>
    </DTesterConfiguration>

代码如下:

public sealed class DTesterConfiguration
{

    private static DTesterConfigurationSection _config;

    static DTesterConfiguration()
    {
        _config = ((DTesterConfigurationSection)(global::System.Configuration.ConfigurationManager.GetSection("DTesterConfiguration")));
    }

    private DTesterConfiguration()
    {
    }

    public static DTesterConfigurationSection Config
    {
        get
        {
            return _config;
        }
    }
}

public sealed partial class DTesterConfigurationSection : System.Configuration.ConfigurationSection
{

    [System.Configuration.ConfigurationPropertyAttribute("profiles")]
    [System.Configuration.ConfigurationCollectionAttribute(typeof(ProfilesElementCollection.ProfileElement), AddItemName = "profile")]
    public ProfilesElementCollection Profiles
    {
        get
        {
            return ((ProfilesElementCollection)(this["profiles"]));
        }
    }

    [System.Configuration.ConfigurationPropertyAttribute("option")]
    //[System.Configuration.ConfigurationCollectionAttribute(typeof(OptionElement), AddItemName = "option")]
    public OptionElement Option
    {
        get
        {
            return ((OptionElement)(this["option"]));
        }
    }


    //<option cmpResWithOacis="true" valRecentRosterPat="false"  maxPatCount="10" maxResCount="3" maxDetCount="3" />
    public sealed partial class OptionElement : System.Configuration.ConfigurationElement
    {

        [System.Configuration.ConfigurationPropertyAttribute("cmpResWithOacis", IsRequired = true)]
        public bool CmpResWithOacis
        {
            get
            {
                return ((bool)(this["cmpResWithOacis"]));
            }
            set
            {
                this["cmpResWithOacis"] = value;
            }
        }

        [System.Configuration.ConfigurationPropertyAttribute("valRecentRosterPat", IsRequired = true)]
        public bool ValRecentRosterPat
        {
            get
            {
                return ((bool)(this["valRecentRosterPat"]));
            }
            set
            {
                this["valRecentRosterPat"] = value;
            }
        }

        [System.Configuration.ConfigurationPropertyAttribute("maxPatCount", IsRequired = true)]
        public long MaxPatCount
        {
            get
            {
                return ((long)(this["maxPatCount"]));
            }
            set
            {
                this["maxPatCount"] = value;
            }
        }

        [System.Configuration.ConfigurationPropertyAttribute("maxResCount", IsRequired = true)]
        public long MaxResCount
        {
            get
            {
                return ((long)(this["maxResCount"]));
            }
            set
            {
                this["maxResCount"] = value;
            }
        }

        [System.Configuration.ConfigurationPropertyAttribute("maxDetCount", IsRequired = true)]
        public long MaxDetCount
        {
            get
            {
                return ((long)(this["maxDetCount"]));
            }
            set
            {
                this["maxDetCount"] = value;
            }
        }


    }

    public sealed partial class ProfilesElementCollection : System.Configuration.ConfigurationElementCollection
    {

        [System.Configuration.ConfigurationPropertyAttribute("defaultProfile", IsRequired = true)]
        public string DefaultProfile
        {
            get
            {
                return ((string)(this["defaultProfile"]));
            }
            set
            {
                this["defaultProfile"] = value;
            }
        }

        public ProfileElement this[int i]
        {
            get
            {
                return ((ProfileElement)(this.BaseGet(i)));
            }
        }

        protected override System.Configuration.ConfigurationElement CreateNewElement()
        {
            return new ProfileElement();
        }

        protected override object GetElementKey(System.Configuration.ConfigurationElement element)
        {
            return ((ProfileElement)(element)).Site;
        }

        public sealed partial class ProfileElement : System.Configuration.ConfigurationElement
        {

            [System.Configuration.ConfigurationPropertyAttribute("site", IsRequired = true)]
            public string Site
            {
                get
                {
                    return ((string)(this["site"]));
                }
                set
                {
                    this["site"] = value;
                }
            }

            [System.Configuration.ConfigurationPropertyAttribute("urlscheme", IsRequired = true)]
            public string Urlscheme
            {
                get
                {
                    return ((string)(this["urlscheme"]));
                }
                set
                {
                    this["urlscheme"] = value;
                }
            }

            [System.Configuration.ConfigurationPropertyAttribute("urldomain", IsRequired = true)]
            public string Urldomain
            {
                get
                {
                    return ((string)(this["urldomain"]));
                }
                set
                {
                    this["urldomain"] = value;
                }
            }

            [System.Configuration.ConfigurationPropertyAttribute("dataSource")]
            public DataSourceElement DataSource
            {
                get
                {
                    return ((DataSourceElement)(this["dataSource"]));
                }
            }

            [System.Configuration.ConfigurationPropertyAttribute("user")]
            public UserElement User
            {
                get
                {
                    return ((UserElement)(this["user"]));
                }
            }



            public sealed partial class DataSourceElement : System.Configuration.ConfigurationElement
            {

                [System.Configuration.ConfigurationPropertyAttribute("dataSource", IsRequired = true)]
                public string DataSource
                {
                    get
                    {
                        return ((string)(this["dataSource"]));
                    }
                    set
                    {
                        this["dataSource"] = value;
                    }
                }

                [System.Configuration.ConfigurationPropertyAttribute("databaseName", IsRequired = true)]
                public string DatabaseName
                {
                    get
                    {
                        return ((string)(this["databaseName"]));
                    }
                    set
                    {
                        this["databaseName"] = value;
                    }
                }

                [System.Configuration.ConfigurationPropertyAttribute("dbUserName", IsRequired = true)]
                public string DbUserName
                {
                    get
                    {
                        return ((string)(this["dbUserName"]));
                    }
                    set
                    {
                        this["dbUserName"] = value;
                    }
                }

                [System.Configuration.ConfigurationPropertyAttribute("dbUserPassword", IsRequired = true)]
                public string DbUserPassword
                {
                    get
                    {
                        return ((string)(this["dbUserPassword"]));
                    }
                    set
                    {
                        this["dbUserPassword"] = value;
                    }
                }
            }

            public sealed partial class UserElement : System.Configuration.ConfigurationElement
            {

                [System.Configuration.ConfigurationPropertyAttribute("userName", IsRequired = true)]
                public string UserName
                {
                    get
                    {
                        return ((string)(this["userName"]));
                    }
                    set
                    {
                        this["userName"] = value;
                    }
                }

                [System.Configuration.ConfigurationPropertyAttribute("password", IsRequired = true)]
                public string Password
                {
                    get
                    {
                        return ((string)(this["password"]));
                    }
                    set
                    {
                        this["password"] = value;
                    }
                }

                [System.Configuration.ConfigurationPropertyAttribute("TOHSoftwareVersion", IsRequired = true)]
                public string TOHSoftwareVersion
                {
                    get
                    {
                        return ((string)(this["TOHSoftwareVersion"]));
                    }
                    set
                    {
                        this["TOHSoftwareVersion"] = value;
                    }
                }

                [System.Configuration.ConfigurationPropertyAttribute("iOSVersion", IsRequired = true)]
                public string IOSVersion
                {
                    get
                    {
                        return ((string)(this["iOSVersion"]));
                    }
                    set
                    {
                        this["iOSVersion"] = value;
                    }
                }

                [System.Configuration.ConfigurationPropertyAttribute("deviceUDID", IsRequired = true)]
                public string DeviceUDID
                {
                    get
                    {
                        return ((string)(this["deviceUDID"]));
                    }
                    set
                    {
                        this["deviceUDID"] = value;
                    }
                }
            }
        }
    }
}

关于c# - 如何从 app.config 中读取自定义对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32909298/

相关文章:

database - 在表中存储用户设置 - 如何?

c# - 最佳实践 : database class to object class in ASP. NET MVC 验证

c# - 如何获取为当前执行的 httphandler 配置的路径?

wordpress - 在多站点 Wordpress 安装中将域 URL 从 https 更改为 http

iphone - 是否可以在我的应用程序的默认设置应用程序中显示动态数据

android - Gradle设置Android项目配置

C#:如何将 TimeSpan 值转换为 double 值?

c# - 在 Visual Studio 中生成类。方法需要建议

c# - 我是否必须派生自 ConfigurationSection 以支持每个用户的设置?

java - 框架中的应用程序特定注入(inject)