XmlTextWriter将对象序列化为XML元素

本文关键字:XML 元素 序列化 对象 XmlTextWriter | 更新日期: 2023-09-27 17:58:12

我只想对现有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());
        }

XmlTextWriter将对象序列化为XML元素

首先,您应该停止使用new XmlTextReader()。自.NET 2.0以来,这一点一直被弃用。请改用XmlReader.Create()

其次,XML不是一种随机访问介质。你不能前后移动,在文件中间写入。这是一个基于文本的文件。

如果您需要"修改"该文件,那么您需要编写该文件的新版本。您可以从原始文件读取,直到需要反序列化,将节点写入文件的新版本。然后,您可以从原始文件反序列化,修改对象,并序列化到新版本。然后,您可以继续读取原始版本,并将节点写入新版本。