我想对现有XML文件中的一个分支执行对象序列化。在阅读时使用:
RiskConfiguration AnObject;
XmlSerializer Xml_Serializer = new XmlSerializer(typeof(RiskConfiguration));
XmlTextReader XmlReader = new XmlTextReader(@"d:\Projects\RiskService\WCFRiskService\Web.config");
XmlReader.ReadToDescendant("RiskConfiguration");
try
{
AnObject = (RiskConfiguration)Xml_Serializer.Deserialize(XmlReader);
AnObject.Databases.Database[0].name = "NewName";
}
finally
{
XmlReader.Close();
}
有可能,我不知道如何再次编辑对象,它可以保存文件而不删除XML文件中的其他现有元素。任何人都可以帮助我吗?
我找到了一种显示所需项目序列化的方法。我现在该怎么做而不是粘贴到XML中的原始元素?
StringWriter wr = new StringWriter();
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.OmitXmlDeclaration = true;
settings.Encoding = System.Text.Encoding.Default;
using (XmlWriter writer = XmlWriter.Create(wr, settings))
{
XmlSerializerNamespaces emptyNamespace = new XmlSerializerNamespaces();
emptyNamespace.Add(String.Empty, String.Empty);
Xml_Serializer.Serialize(writer, AnObject, emptyNamespace);
MessageBox.Show(wr.ToString());
}
答案 0 :(得分:2)
首先,您应该停止使用new XmlTextReader()
。自.NET 2.0以来,这已被弃用。请改用XmlReader.Create()
。
其次,XML不是随机访问媒体。你不能向前和向后移动,写入文件的中间。这是一个基于文本的文件。
如果您需要“修改”该文件,则需要编写该文件的新版本。您可以从原始文件中读取,直到您需要反序列化的程度,将节点写入文件的新版本。然后,您可以从原始文件反序列化,修改对象,并序列化为新版本。然后,您可以继续从原始读取并将节点写入新版本。