2013-02-06 55 views
0

我想對現有XML文件中的一個分支執行對象序列化。在閱讀使用:XmlTextWriter將對象序列化到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

是否有其他訪問xml文件,或者是你的唯一使用它的過程?如果沒有,您可以維護一個XDocument或XmlDocument,它保存原始XML,並在更新文檔時將我們想要序列化/反序列化的相關部分拉回到磁盤。 – Jay

回答

2

首先,你應該停止使用new XmlTextReader()。自.NET 2.0以來,這已被棄用。改爲使用XmlReader.Create()

其次,XML不是隨機訪問的媒介。你不能前進和後退,寫入文件的中間。這是一個基於文本的文件。

如果您需要「修改」該文件,那麼您需要編寫新版本的文件。您可以從原始文件讀取數據,直到需要反序列化的位置,將節點寫入文件的新版本。然後,您可以從原始文件中反序列化,修改對象並序列化爲新版本。然後,您可以繼續閱讀原文並將節點寫入新版本。

+0

好的。但是,如何粘貼序列化對象而不是原始XML元素,以便它不包含名稱空間和xml頭? –