C# - 从XML创建的DataSet中读取数据的简洁方法

时间:2017-02-16 12:31:39

标签: c# xml dataset

我已经为用户设置添加了一个添加了config.xml文件的应用。

我只是通过以下方式阅读:

 DataSet config = new DataSet();
 config.ReadXml(configPath);

config.xml中的参数位于某些表下的列中:

<?xml version="1.0" standalone="yes"?>
<UserSetup>
  <TableA>
    <revBegin>value1</revBegin>
    <revEnd>value2</revEnd>
    ...
  </TableA>
  ...
</UserSetup>

我正在寻找的是一种从DataSet配置中读取的简洁方法,而无需记忆表或列名称。

在我目前的实现中,我通过以下课程实现了这一目标:

public static class MyTables
{
    public static class TableA
    {
        public const String name = "TableA";
        public const String revBegin = "revBegin";
        public const String revEnd = "revEnd";
        ...
    }
    ...
}

我读了这样的价值观:

String revEnd = config.Tables[MyTables.TableA.name].Rows[0][MyTables.TableA.revEnd].ToString();

但是我在某种程度上填补了这个很容易解决的问题,非常复杂 - 更不用说讨厌了。

你知道我怎样才能让事情更简单或更清洁?

P.S。在某些时候,我尝试将config.Tables[MyTables.TableA.name]部分缩减为config.Tables[MyTables.TableA]但是 - 我如何看待它 - 需要将Index[object]添加到密封的类DataTableCollection并覆盖ToString()方法在我的静态课堂 - 两者都不可能。我是对的吗?

1 个答案:

答案 0 :(得分:1)

除非您必须使用DataSet来读取XML,否则使用XML序列化可以获得相同的结果。使用以下内容注释您的课程。

        [XmlRoot]
        [Serializable]
        public class UserSetUp
        {
            [XmlElement]
            public TableA TableA { get; set; }
        }

        [Serializable]
        public class TableA
        {
            [XmlElement]
            public string revBegin { get; set; }

            [XmlElement]
            public string revEnd { get; set; }
        }

假设您的配置在C:\上为此示例。

    var configStream = File.OpenRead(@"C:\Config.xml");
    var reader = new StreamReader(configStream);
    var xmlString = reader.ReadToEnd();
    var serializer = new XmlSerializer(typeof(UserSetUp));
    var stringReader = new StringReader(xmlString);

    var userSetup = (UserSetUp)serializer.Deserialize(stringReader);

我已经使用以下XML对其进行了测试,并且运行正常。

<?xml version="1.0" encoding="utf-16" ?>
<UserSetUp>
  <TableA>
    <revBegin>1</revBegin>
    <revEnd>2</revEnd>
  </TableA>
</UserSetUp>

希望能帮到你。

相关问题