C# 序列化/反序列化部分XML文件
我正在处理大量大型描述性XML文件,只需读取最外层的元素,更改值,然后再次保存即可 例如-C# 序列化/反序列化部分XML文件,c#,xml,serialization,C#,Xml,Serialization,我正在处理大量大型描述性XML文件,只需读取最外层的元素,更改值,然后再次保存即可 例如- <Model Name="someModel"> <Material Name="someMaterial" Effect="someEffect"> <Texture Name="tex1" Path="somePath"/> <Colour Name="colour1" Value="FFF"/>
<Model Name="someModel">
<Material Name="someMaterial" Effect="someEffect">
<Texture Name="tex1" Path="somePath"/>
<Colour Name="colour1" Value="FFF"/>
<Layer Index="0"/>
... many more elements I don't are about
</Material>
</Model>
有一个问题。它指示反序列化程序按原样存储无法识别的元素。但是,根据您的情况,使用XmlReader XmlWriter筛选器或带有XPath的XmlDocument可能会更好
namespace WpfApplication9
{
public class Material
{
[XmlAttribute]
public string Name
{
get;
set;
}
[XmlAttribute]
public string Effect
{
get;
set;
}
}
public class Item
{
[XmlAttribute]
public string Name
{
get;
set;
}
public Material Material
{
get;
set;
}
public static Item Load(string _path)
{
Item item = new Item();
item.m_doc = new XmlDocument();
item.m_doc.Load(_path);
XmlNode rootNode = item.m_doc.FirstChild;
item.Name = rootNode.Attributes["Name"].InnerText;
XmlNode materialNode = rootNode.FirstChild;
item.Material = new Material();
item.Material.Name = materialNode.Attributes["Name"].InnerText;
item.Material.Effect = materialNode.Attributes["Effect"].InnerText;
return item;
}
public void Save(string _path)
{
XmlNode rootNode = m_doc.FirstChild;
rootNode.Attributes["Name"].InnerText = Name;
XmlNode materialNode = rootNode.FirstChild;
materialNode.Attributes["Name"].InnerText = Material.Name;
materialNode.Attributes["Effect"].InnerText = Material.Effect;
m_doc.Save(XmlWriter.Create(_path, new XmlWriterSettings()
{
IndentChars = "\t",
Indent = true
}));
}
XmlDocument m_doc;
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Item item = Item.Load("Data.xml");
item.Name = "Terry";
item.Save("Data.xml");
}
}
}