Мое приложение сохраняет содержимое в файл XML или считывает содержимое из файла XML. Содержание - это структура проекта, и файл XML может существовать везде.
Например, структура файла XML, используемого моим приложением, показана ниже.
<Project version="1">
<Item Include="A.text"/>
<Item Include="Folder/A.text"/>
</Project>
Как Вы можете видеть, что тег include для Item является относительным путем, поэтому для открытия элемента требуется путь root. (Путь к файлу проекта)
Структура моего приложения для обработки такая, как показано ниже.
public class Project, IXmlSerializable
{
public ObservableCollection<Item> Items {get; set;} = new ObservableCollection<Item>();
public XmlSchema GetSchema() => null;
public void ReadXml(XmlReader reader)
{
// here would read ChildNode (Items)
}
public void WriteXml(XmlWriter writer)
{
...
}
}
public class Item, IXmlSerializable
{
public XmlSchema GetSchema() => null;
public void ReadXml(XmlReader reader)
{
...
}
public void WriteXml(XmlWriter writer)
{
...
}
}
И код чтения такой, как показано ниже.
using (StreamReader sr = new StreamReader(message.ProjectFullPath))
{
XmlSerializer xs = new XmlSerializer(typeof(ProjectStruct));
this.Projects.Add(xs.Deserialize(sr) as ProjectStruct);
}
Как вы можете видите, я создал запись, читая логи c, выводя IXmlSerializable для использования функции Serialize, DeSerialize.
Когда вызывается метод DeSerialize, вызывается метод Read Xml для ProjectStruct. И метод Read Xml не имеет параметра, отличного от XmlReader, поэтому я не могу передать ProjectFullPath методу Read XML.
Поэтому я считаю, что необходимо получить ProjectFullPath из XmlReader.
Could кто-нибудь подскажет, как имя метода XmlReader получает текущий путь к файлу?
Если у вас есть другой способ решения этой проблемы, пожалуйста, дайте мне знать. Я не зацикливаюсь на своем.
Спасибо за чтение.