我的应用程序将内容保存到XML文件或从XML文件读取内容。内容是项目结构,XML文件可以随处可见。
例如,我的应用程序使用的XML文件的结构如下所示。
<Project version="1">
<Item Include="A.text"/>
<Item Include="Folder/A.text"/>
</Project>
如您所见,Item的include标记是相对路径,因此需要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);
}
如您所见,我创建了编写,读取派生IXmlSerializable的逻辑,以使用Serialize,DeSerialize函数。
当调用DeSerialize方法时,将调用ProjectStruct的ReadXml方法。而且ReadXml方法除了XmlReader之外没有其他参数,因此我无法将ProjectFullPath传递给ReadXML方法。
因此,我认为需要从XmlReader获取ProjectFullPath。
有人可以告诉我XmlReader的方法名称是什么获取当前文件路径吗?
如果您还有其他解决此问题的方法,请告诉我。我不会迷路。
感谢阅读。
您不能将接口定义的XmlReader
以外的任何内容传递给ReadXml
方法。
取决于您实例化Item
类的方式,您可以使用定义路径的string
注入它:
public class Item(string path)
...
如果无法执行此操作,则应在XML数据中包含完整路径,然后从那里读取它。
最后的选择可能是从开始处理XML文件之前设置的Item
静态属性中获取它。
无论如何,您不能修改方法的签名。