Hier ist, was ich benutze:
using System;
using System.Collections.Generic;
using System.Xml;
using System.Xml.Serialization;
using System.Text;
using System.IO;
namespace Utils
{
public class XMLSerializer
{
public static Byte[] StringToUTF8ByteArray(String xmlString)
{
return new UTF8Encoding().GetBytes(xmlString);
}
public static String SerializeToXML<T>(T objectToSerialize)
{
StringBuilder sb = new StringBuilder();
XmlWriterSettings settings =
new XmlWriterSettings {Encoding = Encoding.UTF8, Indent = true};
using (XmlWriter xmlWriter = XmlWriter.Create(sb, settings))
{
if (xmlWriter != null)
{
new XmlSerializer(typeof(T)).Serialize(xmlWriter, objectToSerialize);
}
}
return sb.ToString();
}
public static void DeserializeFromXML<T>(string xmlString, out T deserializedObject) where T : class
{
XmlSerializer xs = new XmlSerializer(typeof (T));
using (MemoryStream memoryStream = new MemoryStream(StringToUTF8ByteArray(xmlString)))
{
deserializedObject = xs.Deserialize(memoryStream) as T;
}
}
}
}
Dann rufen Sie einfach:
string xml = Utils.SerializeToXML(myObjectsIEnumerable);
Ich habe es nicht versucht, mit, zum Beispiel ein IEnumerable
, die bei holt ein Objekt eine Zeit entfernt oder irgendwelche anderen seltsamen Anwendungsfälle, aber es funktioniert perfekt für List<T>
und andere Sammlungen, die im Speicher sind.
EDIT: Basierend auf Ihre Kommentare als Reaktion auf diese, könnten Sie XmlDocument.LoadXml
verwenden, um die resultierenden XML-String in ein XmlDocument
, speichern die erste zu einer Datei zu laden und verwenden, die als XML-Datei-Master. Verwenden Sie für jeden Artikel in IEnumerable
erneut LoadXml
, um einen neuen speicherinternen XmlDocument
zu erstellen, greifen Sie die gewünschten Knoten an, hängen Sie sie an das Masterdokument an und speichern Sie sie erneut, um den neuen zu entfernen.
Nachdem Sie fertig sind, gibt es möglicherweise eine Möglichkeit, alle Knoten in Ihrem Stamm-Tag zu umbrechen. Sie können auch XSL und XslCompiledTransform
verwenden, um eine andere XML-Datei zu schreiben, in der die Objekte ordnungsgemäß im Root-Tag eingeschlossen sind.
Siehe http://www.hanselman.com/blog/MixingXmlSerializersWithXElementsAndLINQToXML.aspx – bajafresh4life