2016-07-22 23 views
1

我試圖將序列化結構添加到現有XML文件。在下面的代碼中,將序列化結構添加到XML文件

  • 我測試該文件是否存在。
  • 如果沒有,我創建它。
  • 如果它存在我想用.Add語法添加一個序列化的結構(從存儲流)的文件。
  • xmlDoc.Add(xmlSerialized);執行時,它會提示以下錯誤:

「非空白字符不能添加內容。」

我在做什麼錯?

try 
{ 
    xmlDoc = XDocument.Load(path); 
    XmlSerializer xmlSerialized = new XmlSerializer(typeof(DataClass.Task)); 
    MemoryStream memStream = new MemoryStream(); 
    xmlSerialized.Serialize(memStream, taskStruct); 
    xmlDoc.Add(xmlSerialized); 

    bSuccess = true; 
} 

回答

1

編輯以解決問題爲MemoryStream的似乎不是一個有效的類型,請通過在每Valid Content of XElement and XDocument Objects

我覺得您遇到的問題是,你要添加實例的XmlSerializerXDocument,而不是包含在MemoryStreammemStream序列化的對象。

由於MemoryStream似乎是不能在傳遞的類型,嘗試XElementCreateWriter()方法,像這樣:

try 
{ 
    xmlDoc = XDocument.Load(path); 
    XDocument newXml = new XDocument(); 

    using (var writer = newXml.CreateWriter()) 
    { 
     // write xml into the writer 
     DataContractSerializer xmlSerialized = new DataContractSerializer(typeof(DataClass.Task)); 
     xmlSerialized.WriteObject(writer, taskStruct); 
    } 

    xmlDoc.Add(writer); 

    bSuccess = true; 
} 

上面的代碼基於這樣的回答:How do I serialize an object into an XDocument?

+0

添加memStream返回錯誤的未白色空間。我試圖xmlDoc.Root.Add(memStream),並得到這個: System.IO.MemoryStream IrvineCAGuy

+0

@IrvineCAGuy - 你嘗試新的例子我張貼?它不使用MemoryStream,而是使用XElement上的CreateWriter方法將序列化對象寫入XElement,然後您應該能夠將其添加到xisting XML文檔中。 – Tim

+0

聲明XElement newXml = new XElement()語句在System.Linq.XElement中無效。它需要兩個參數。但是你的解決方案看起來很接近。 – IrvineCAGuy