我已经为用户设置添加了一个添加了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()
方法在我的静态课堂 - 两者都不可能。我是对的吗?
答案 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>
希望能帮到你。