Вот что я использую:
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;
}
}
}
}
Тогда просто позвоните:
string xml = Utils.SerializeToXML(myObjectsIEnumerable);
Я не пробовал его, например, IEnumerable
, который выбирает объекты один на время удаленно или любые другие странные варианты использования, но он отлично работает для List<T>
и других коллекций, которые находятся в памяти.
EDIT: на основе ваших комментариев в ответ на это, вы могли бы использовать XmlDocument.LoadXml
загрузить полученную строку XML в XmlDocument
, сохранить первый в файл и использовать его в качестве главного файла XML. Для каждого элемента в IEnumerable
снова используйте LoadXml
, чтобы создать новую в памяти XmlDocument
, возьмите нужные узлы, добавьте их в главный документ и сохраните снова, избавившись от нового.
После того, как вы закончите, может быть способ обернуть все узлы в вашем корневом теге. Вы также можете использовать XSL и XslCompiledTransform
для записи другого XML-файла с объектами, правильно упакованными в корневой тег.
См http://www.hanselman.com/blog/MixingXmlSerializersWithXElementsAndLINQToXML.aspx – bajafresh4life