Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# XmlTextWriter将对象序列化为XML元素_C#_Xml_Serialization_Deserialization_Xmltextwriter - Fatal编程技术网

C# XmlTextWriter将对象序列化为XML元素

C# XmlTextWriter将对象序列化为XML元素,c#,xml,serialization,deserialization,xmltextwriter,C#,Xml,Serialization,Deserialization,Xmltextwriter,我只想对现有XML文件中的一个分支执行对象序列化。阅读时使用: RiskConfiguration AnObject; XmlSerializer Xml_Serializer = new XmlSerializer(typeof(RiskConfiguration)); XmlTextReader XmlReader = new XmlTextReader(@"d:\Projects\RiskService\WCFRiskService\Web

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

首先,您应该停止使用
newXMLTextReader()
。自.NET 2.0以来,它一直被弃用。改用
XmlReader.Create()

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


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

是否还有其他内容可以访问xml文件,或者您的流程是否是唯一对其执行任何操作的流程?如果没有,您可以维护保存原始XML的XDocument或XmlDocument,并在更新文档时提取要序列化/反序列化的相关部分并将其刷新回磁盘。Ok。但是如何粘贴序列化对象而不是原始XML元素,使其不包含名称空间和XML头?