【问题标题】:Deserializing web.config custom sections using the classes generated by XSD使用 XSD 生成的类反序列化 web.config 自定义部分
【发布时间】:2011-06-22 05:15:03
【问题描述】:

我在 Web.Config 文件中有一个自定义部分,并通过 configSource 引用另一个 .config 文件。我已经为我的架构使用 XSD 生成了 .cs 文件。如何使用我生成的类来反序列化配置。当我尝试使用 .GetSection() 方法加载 configsection 时,它给了我该类应该从 ConfigurationSection 实现的错误。由于我使用 xsd 生成了这些类,因此它们不是从 ConfigurationSection 或 ConfigurationElement 继承的。提前致谢!!

【问题讨论】:

    标签: web-config configurationmanager


    【解决方案1】:

    我已经实现了 ConfigurationSection 中的类来获取文件名,并使用 XMLSerializer 使用 XSD 工具生成的类来反序列化。这是示例:

    namespace mycontrol
    {
          public class ConfigurationSection : System.Configuration.ConfigurationSection
            {
               //Configuration is the type generated by XSD for my schema element Configuration
    
                private static Configuration _config; 
    
                /// <summary>
                /// static method to load config section and deserialize config
                /// </summary>
                /// <returns></returns>
                private static Configuration GetConfig()
                {
                    if (_config == null)
                    {
                        ConfigurationSection configSection = (ConfigurationSection)ConfigurationManager.GetSection("SearchControlsConfig") as ConfigurationSection;
                        if (!string.IsNullOrEmpty(configSection.ExternalConfigSource))
                        {
                            string strFilePath = configSection.ExternalConfigSource;
                            if (!File.Exists(strFilePath))
                            {
                                strFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, strFilePath);
                                if (!File.Exists(strFilePath))
                                    return null;
                            }
    
                            using (FileStream fs = new FileStream(strFilePath, FileMode.Open, FileAccess.Read))
                            {
                                XmlSerializer config = new XmlSerializer(typeof(Configuration));
                                _config = (Configuration)config.Deserialize(fs);
                            }
                        }
    
                    }
    
                    return _config;
                }
    
    
                /// <summary>
                /// Attribute to specify config source file in custom config section
                /// </summary>
                [ConfigurationProperty("externalConfigSource", DefaultValue = "", IsRequired = false)]
                public string ExternalConfigSource
                {
                    get
                    {
                        return this["externalConfigSource"] as string;
                    }
                }
            }
    }
    

    在指定自定义配置时,我不能将 configSource 属性用作我的属性,因为它由 ConfigurationManager 保留。

    【讨论】:

      猜你喜欢
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-30
      • 2012-11-18
      相关资源
      最近更新 更多