2016-07-22 6 views
1

Ich versuche, eine serialisierte Struktur zu einer vorhandenen XML-Datei hinzuzufügen. In dem folgenden CodeSerialisierte Struktur zu XML-Datei hinzufügen

  • Ich Test, ob die Datei vorhanden ist.
  • Wenn nicht, erstelle ich es.
  • Wenn es existiert, möchte ich eine serialisierte Struktur (aus einem Speicher-Stream) zu der Datei mit der .Add Syntax hinzufügen.
  • Wenn xmlDoc.Add(xmlSerialized); ausgeführt wird, den folgenden Fehler wird

„Non Leerzeichen können nicht zum Inhalt hinzugefügt werden.“

Was mache ich falsch?

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; 
} 

Antwort

1

Edited Problem zu beheben als Memory keinen gültigen Typ zu sein scheint passieren in pro Valid Content of XElement and XDocument Objects

ich glaube, das Problem Sie begegnen, ist, dass Sie versuchen, die Instanz hinzufügen von XmlSerializer zu XDocument, anstatt das serialisierte Objekt enthalten in der MemoryStreammemStream.

Da MemoryStream scheint eine Art zu sein, die nicht in übergeben werden kann, versuchen Sie die CreateWriter() Methode von XElement, wie folgt aus:

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; 
} 

Above Code auf der Grundlage dieser Antwort: How do I serialize an object into an XDocument?

+0

Hinzufügen memStream gibt Fehler nicht weißer Raum. Ich habe versucht xmlDoc.Root.Add (memStream) und erhalten Sie diese: System.IO.MemoryStream IrvineCAGuy

+0

@ IrvineCAGuy - Haben Sie das neue Beispiel, das ich gepostet habe versucht? Es verwendet nicht MemoryStream, sondern verwendet die CreateWriter-Methode für XElement, um das serialisierte Objekt in ein XElement zu schreiben, das Sie dann dem vorhandenen XML-Dokument hinzufügen können. – Tim

+0

deklarieren XElement newXml = neue XElement() -Anweisung ist in System.Linq.XElement nicht gültig. Es will zwei Argumente. Aber Ihre Lösung sieht so aus, als ob sie sich nähert. – IrvineCAGuy

Verwandte Themen