Необходимо создать классы, соответствующие определению в файле 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})";
}
}
Теперь все, что нам нужно сделать, это создать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...");
}
Вывод
![enter image description here](https://i.stack.imgur.com/kKNeQ.png)