使用C#,有没有一种方法可以轻松解析XML文件,以便将其用作对象?
XML 示例:
<Config>
<Ui>
<Colour>black</Colour>
<Size>small</Size>
</Ui>
<Output>
<Mode>smb</Mode>
<Version>2</Version>
</Output>
</Config>
Run Code Online (Sandbox Code Playgroud)
然后参考我的应用程序中的参数
Config.Output.Mode
Run Code Online (Sandbox Code Playgroud)
我尝试过这种方法 - How to Deserialize XML document
但当我尝试时
var cfg = new Config();
cfg.Load(@"config.xml");
Console.WriteLine(cfg.Output.Mode);
Run Code Online (Sandbox Code Playgroud)
Visual Studio 指示 .Output.Mode 无效。
Config.Load 所在位置
Config.Output.Mode
Run Code Online (Sandbox Code Playgroud)
您必须创建与 xml 文件中的定义匹配的类,才能将文件反序列化为该类的实例。请注意,我为属性命名的名称与 xml 文件中的名称相同。如果您想使用不同的属性名称,那么您需要在属性上方添加一个属性,指定应映射到它的 xml 元素(例如Ui,您将添加属性:[XmlElement("Ui")]).
请注意,我还重写了ToString类的方法,以便我们可以以良好的方式将它们输出到控制台:
public class Config
{
public UI Ui { get; set; }
public Output Output { get; set; }
public override string ToString()
{
return $"Config has properties:\n - Ui: {Ui}\n - Output: {Output}";
}
}
public class UI
{
public string Colour { get; set; }
public string Size { get; set; }
public override string ToString()
{
return $"(Colour: {Colour}, Size: {Size})";
}
}
public class Output
{
public string Mode { get; set; }
public int Version { get; set; }
public override string ToString()
{
return $"(Mode: {Mode}, Version: {Version})";
}
}
Run Code Online (Sandbox Code Playgroud)
现在我们要做的就是创建一个StreamReader,将其指向我们的文件路径,然后使用该文件XmlSerializer的类Deserialize(将输出转换为适当的类型)到一个对象中:
static void Main(string[] args)
{
var filePath = @"f:\private\temp\temp2.txt";
// Declare this outside the 'using' block so we can access it later
Config config;
using (var reader = new StreamReader(filePath))
{
config = (Config) new XmlSerializer(typeof(Config)).Deserialize(reader);
}
Console.WriteLine(config);
GetKeyFromUser("\n\nDone! Press any key to exit...");
}
Run Code Online (Sandbox Code Playgroud)
输出