2013-04-22 59 views
0

我试图创建一个自定义设置类来存储一些用户范围的设置。我在几个月前完成了这个工作,工作得很好,但我不记得所有的细节,也无法再访问源代码。这是我到目前为止有:试图创建一个自定义的部分设置文件

CustomSettings.cs

internal sealed partial class CustomSettings : global::System.Configuration.ApplicationSettingsBase 
{ 
    private static CustomSettings defaultInstance = ((CustomSettings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new CustomSettings()))); 

    public static CustomSettings Default 
    { 
     get 
     { 
      return defaultInstance; 
     } 
    } 

    [global::System.Configuration.UserScopedSettingAttribute()] 
    public global::System.Collections.Generic.List<global::LearningProject.Types.Product> Products 
    { 
     get 
     { 
      return ((global::System.Collections.Generic.List<global::LearningProject.Types.Product>)(this["Products"])); 
     } 
     set 
     { 
      this["Products"] = value; 
     } 
    } 
} 

Product.cs

[Serializable] 
public class Product 
{ 
    [XmlAttribute("Name")] 
    public string Name { get; set; } 

    [XmlAttribute("Id")] 
    public int Id { get; set; } 
} 

这里的的App.config文件,并包含一个样本Product

<configuration> 
<configSections> 
    <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > 
     <section name="LearningProject.Settings1" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> 
     <section name="LearningProject.CustomSettings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" /> 
    </sectionGroup> 
</configSections> 
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup> 
    <userSettings> 
     <LearningProject.CustomSettings> 
      <setting name="Products" serializeAs="Xml"> 
      <ArrayOfProduct> 
       <Product> 
       <Name>Product1</Name> 
       <Id>ProductID</Id> 
       </Product> 
      </ArrayOfProduct> 
      </setting> 
     </LearningProject.CustomSettings> 
    </userSettings> 
</configuration> 

现在,我得到null当我尝试获得Products列表:

List<Product> products = CustomSettings.Default.Products; 

这意味着无论是我做错了什么(XML属性,也许?)还是我缺少的一个步骤。另外请注意,Settings1.settings(由VS生成)已经存在,并且我的CustomSettings类只是将方法添加到默认的自动生成的设置文件。我只是想知道是否有人曾经这样做过。任何帮助表示赞赏。

回答

0

在app.config中更换

<setting name="Products" serializeAs="Xml"> 
    <ArrayOfProduct> 
    <Product> 
     <Name>Product1</Name> 
     <Id>ProductID</Id> 
    </Product> 
    </ArrayOfProduct> 
</setting> 

<setting name="Products" serializeAs="Xml"> 
    <value> 
    <ArrayOfProduct> 
     <Product Name="Product1" Id="1" /> 
    </ArrayOfProduct> 
    </value> 
</setting> 

如何实现这个

CustomSettings.Default.Products = new List<Product>(); 
CustomSettings.Default.Products.Add(new Product() { Id = 1, Name = "Product1" }); 
CustomSettings.Default.Save(); 

现在本地配置(%appdatalocal%\ PROJECT_NAME .. \ user.config )包含正确的值

+0

我还是得到null当我手动将它们添加到'app.config'时,但通过代码添加它似乎工作,但即使如此,我仍然无法在'app.config'中看到它们,这表明它们正在保存在其他地方。任何想法? – PoweredByOrange 2013-06-26 16:23:05

+0

更正了我的答案:忘记了位于%appdatalocal%\ project_name .. \ user.config中的0123.tag.Local配置。完成后将其删除,否则将从中取出设置 – cdmnk 2013-06-27 10:18:14

+0

但是,如何将设置直接放在app.config中?当我在几个月前第一次完成时,所有设置都是在app.config中写入/读取的。 – PoweredByOrange 2013-06-27 16:04:20