代码之家  ›  专栏  ›  技术社区  ›  Benoit

在.net中持久化配置项

  •  3
  • Benoit  · 技术社区  · 16 年前

    我有一组需要保存到“人类可读”文件的配置项。这些项目位于层次结构中:

    Device 1
       Name
       Channel 1
         Name
         Size
         ...
       Channel N
         Name
    ...
    Device M
       Name
       Channel 1
    

    这些项中的每一项都可以用字符串键和值存储在字典中。它们也可能位于结构/DTO中。

    我不在乎文件的格式,只要它是人类可读的。它可以是XML,也可以有类似INI格式的东西

    [Header]
      Key=value
      Key2=value
    ...
    

    我是否应该创建数据传输对象(DTO)/结构并将其标记为可序列化(这会生成臃肿的XML还是人类可读的?)

    编辑:不是说软件必须 以及 配置。这就不需要app.config了。

    8 回复  |  直到 16 年前
        1
  •  3
  •   Mark Cidade    16 年前
        2
  •  2
  •   Community CDub    7 年前

    我想两个 XmlSerializer NetDataContractSerializer 创建人类可读的XML。 I prefer

    您还可以将配置写入本地app.config文件,或使用自定义配置将配置写入子配置文件 ConfigSections Configuration class .

        3
  •  2
  •   David Robbins    16 年前

    Product product = new Product();    
    product.Name = "Apple";    
    product.Expiry = new DateTime(2008, 12, 28);    
    product.Price = 3.99M;    
    product.Sizes = new string[] { "Small", "Medium", "Large" };    
    
    string json = JavaScriptConvert.SerializeObject(product);
    //{
    //  "Name": "Apple",
    //  "Expiry": new Date(1230422400000),
    //  "Price": 3.99,
    //  "Sizes": [
    //    "Small",
    //    "Medium",
    //    "Large"
    //  ]
    //}   
    
    Product deserializedProduct = JavaScriptConvert.DeserializeObject<Product>(json);
    

    你可以阅读他的博客并下载JSON.Net here .

        4
  •  1
  •   yfeldblum    16 年前

    FileHelpers 图书馆它有很多东西可以读取和写入许多不同的格式,你所要做的就是用属性标记对象并调用Save()。有点像平面文件的ORM。

        5
  •  1
  •   theraccoonbear    16 年前

    我怀疑您要使用的是一个app.config文件,其中包含XML格式的设置。NET将能够使用System.Configuration名称APCE加载该设置。

    更多信息请点击此处: http://geekswithblogs.net/akraus1/articles/64871.aspx

        6
  •  0
  •   Chris Charabaruk    16 年前

    我通常使用注册表来存储配置(我知道,我很糟糕!),但是使用System.Xml来读/写轻量级Xml文件并不难。事实上,我最近刚刚为一个插件项目做了这项工作,该项目使用XML文档与其主机通信并存储其自身的持久设置。

        7
  •  0
  •   Robert Rossney    16 年前

    我会使用一个可以序列化为XML的数据结构——事实上,因为我很懒,所以我会使用ADO.NET数据集,因为它有一个简单的序列化格式,您无需费劲思考就可以生成。

    至于使其具有人类可读性:如果它必须是人类可读的(而不是人类可修改的,我认为这就是您在这里描述的),我将构建一个XSLT转换,并在编写XML时使用它生成配置数据的HTML版本。这为您提供了对数据的可视表示的细粒度控制,正如您可能要求的那样。

        8
  •  0
  •   Tim Cooper    13 年前

    在这种情况下,我的首选方法是使用DataTables为配置数据创建一个数据集,该数据集以良好的关系方式排列,然后使用DataSet.WriteXML()将其保存到配置文件中。

    然后,要再次加载它,只需使用DataSet.ReadXML(),它就会回到一个很好的可查询对象中。

    这是一个示例配置文件,my app允许用户在文本编辑器窗口中编辑该文件:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    <!--****************************************************************
     Config File: FileToExcel_test.cfg
          Author: Ron Savage
            Date: 06/20/2008
    
     Description: 
     File to test parsing a file into an Excel workbook.
    
     Modification History: 
     Date       Init Comment
     06/20/2008 RS   Created.
    ******************************************************************-->
    
    <!--********************************************************************
     Global Key Definitions
    ********************************************************************-->
       <config key="sqlTimeout"      value="1800"/>
       <config key="emailSMTPServer" value="smtp-server.austin.rr.com"/>
       <config key="LogFile"         value="FiletoExcel_test_{yyyy}{mm}{hh}.log"/>
       <config key="MaxEntries"      value="1"/>
    
    <!--********************************************************************
     Delimiter Configurations
    ********************************************************************-->
       <config key="pipe"           value="|"/>
    
    
    <!--********************************************************************
     Source / Target Entries
    ********************************************************************-->
       <config key="source_1"  value="FILE, c:\inetpub\ftproot\filetoexcel.txt, pipe, , , , , "/>
       <config key="target_1"  value="XLS, REPLACE, c:\inetpub\ftproot\filetoexcel1.xls, , , , , , , ,c:\inetpub\ftproot\filetoexcel_template.xls, ,3"/>
       <config key="notify_1"  value="store_error, store_success"/>
    </configuration>
    

    配置 有田地 价值 . 很容易搜索。