2011-06-22 5 views
0

私はWeb.Configファイルにカスタムセクションを持ち、configSourceによって別の.configファイルを参照します。スキーマ用にXSDを使用して.csファイルを生成しました。生成されたクラスを使用して設定を逆シリアル化する方法.GetSection()メソッドを使用してコンフィグレーションをロードしようとすると、クラスがConfigurationSectionから実装する必要があるというエラーが表示されます。 xsdを使用してクラスを生成したので、ConfigurationSectionまたはConfigurationElementから継承されませんでした。前もって感謝します!!XSDで生成されたクラスを使用してweb.configカスタムセクションをデシリアライズ

答えて

0

私は、ファイル名を取得するためにConfigurationSectionからクラスを実装し、XSDツールによって生成されたクラスを使用してXMLSerializerを使用して逆直列化しました。ここではサンプルです:

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; 
       } 
      } 
     } 
} 

カスタム設定を指定して、それがのConfigurationManagerで予約されているので、私は、私の財産としてconfigSource属性を使用することはできません。

関連する問題