【问题标题】:XmlTextWriter serialize Object to XML elementXmlTextWriter 将对象序列化为 XML 元素
【发布时间】:2013-02-06 14:30:52
【问题描述】:

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

【问题讨论】:

  • 是否还有其他任何东西可以访问 xml 文件,或者您的进程是唯一对其进行处理的进程吗?如果没有,您可以维护一个包含原始 XML 的 XDocument 或 XmlDocument,并在更新文档时提取您想要序列化/反序列化的相关部分并将其刷新回磁盘。

标签: c# xml serialization deserialization xmltextwriter


【解决方案1】:

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

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

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

【讨论】:

  • 好的。但是如何粘贴序列化对象而不是原始 XML 元素,使其不包含命名空间和 xml 标头?
猜你喜欢
  • 1970-01-01
  • 2016-09-23
  • 1970-01-01
  • 2011-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多