技术开发 频道

.NET中读写config文件的各种方法解析

  xml配置文件

   前面演示在config文件中创建自定义配置节点的方法,那些方法也只适合在app.config或者web.config中,如果您的配置参数较多,或者打算将一些数据以配置文件的形式单独保存,那么,直接读写整个XML将会更方便。比如:我有一个实体类,我想将它保存在XML文件中,有可能是多条记录,也可能是一条。

  这次我来反过来说,假如我们先定义了XML的结构,是下面这个样子的,那么我将怎么做呢?

<?xml version="1.0" encoding="utf-8"?>
<ArrayOfMyCommand xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                  xmlns:xsd
="http://www.w3.org/2001/XMLSchema">
  
<MyCommand Name="InsretCustomer" Database="MyTestDb">
    
<Parameters>
      
<Parameter Name="Name" Type="DbType.String" />
      
<Parameter Name="Address" Type="DbType.String" />
    
</Parameters>
    
<CommandText>insret into .....</CommandText>
  
</MyCommand>
</ArrayOfMyCommand>

   对于上面的这段XML结构,我们可以在C#中先定义下面的类,然后通过序列化及反序列化的方式来实现对它的读写。

  C#类的定义如下:

public class MyCommand
{
    [XmlAttribute(
"Name")]
    
public string CommandName;

    [XmlAttribute]
    
public string Database;

    [XmlArrayItem(
"Parameter")]
    
public List<MyCommandParameter> Parameters = new List<MyCommandParameter>();

    [XmlElement]
    
public string CommandText;
}

public class MyCommandParameter
{
    [XmlAttribute(
"Name")]
    
public string ParamName;

    [XmlAttribute(
"Type")]
    
public string ParamType;
}

   有了这二个C#类,读写这段XML就非常容易了。

  以下就是相应的读写代码:

private void btnReadXml_Click(object sender, EventArgs e)
{
    btnWriteXml_Click(null, null);
    
    List
<MyCommand> list = XmlHelper.XmlDeserializeFromFile<List<MyCommand>>(XmlFileName, Encoding.UTF8);

    
if( list.Count > 0 )
        MessageBox.Show(list[
0].CommandName + ": " + list[0].CommandText,
            this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);

}

private void btnWriteXml_Click(object sender, EventArgs e)
{
    MyCommand
command = new MyCommand();
    
command.CommandName = "InsretCustomer";
    
command.Database = "MyTestDb";
    
command.CommandText = "insret into .....";
    
command.Parameters.Add(new MyCommandParameter { ParamName = "Name", ParamType = "DbType.String" });
    
command.Parameters.Add(new MyCommandParameter { ParamName = "Address", ParamType = "DbType.String" });

    List
<MyCommand> list = new List<MyCommand>(1);
    list.Add(
command);

    XmlHelper.XmlSerializeToFile(list, XmlFileName, Encoding.UTF8);
}

   小结:

  ①读写整个XML最方便的方法是使用序列化反序列化。

  ② 如果您希望某个参数以Xml Property的形式出现,那么需要使用[XmlAttribute]修饰它。

  ③如果您希望某个参数以Xml Element的形式出现,那么需要使用[XmlElement]修饰它。

  ④如果您希望为某个List的项目指定ElementName,则需要[XmlArrayItem]

  ⑤ 以上3个Attribute都可以指定在XML中的映射别名。

  ⑥ 写XML的操作是通过XmlSerializer.Serialize()来实现的。

  ⑦ 读取XML文件是通过XmlSerializer.Deserialize来实现的。

  ⑧ List或Array项,请不要使用[XmlElement],否则它们将以内联的形式提升到当前类,除非你再定义一个容器类。

0
相关文章