XmlSerializer
фактически создает сборку (с XmlSerializationWriter
), специально созданную для сериализации вашего класса.Вы можете посмотреть на сгенерированный код, выполнив эти шаги .
Вы платите цену только при первом обнаружении нового типа.
Так что я думаю, что вы должныдействительно использовать XmlSerializer
не только для производительности, но и для удобства обслуживания.
Вы можете использовать mixin-like класс сериализатора:
public interface MXmlSerializable { }
public static class XmlSerializable {
public static string ToXml(this MXmlSerializable self) {
if (self == null) throw new ArgumentNullException();
var serializer = new XmlSerializer(self.GetType());
using (var writer = new StringWriter()) {
serializer.Serialize(writer, self);
return writer.GetStringBuilder().ToString();
}
}
}
public class Customer : MXmlSerializable {
public string Name { get; set; }
public bool Preferred { get; set; }
}
// ....
var customer = new Customer {
Name = "Guybrush Threepwood",
Preferred = true };
var xml = customer.ToXml();