Чтобы сделать то, что Джон Сондерс описывал более четко, десериализация очень проста:
public static object DeserializeFromXElement(XElement element, Type t)
{
using (XmlReader reader = element.CreateReader())
{
XmlSerializer serializer = new XmlSerializer(t);
return serializer.Deserialize(reader);
}
}
Сериализация немного сложнее, потому что вызов CreateWriter()
из XElement или XDocument создает дочерние элементы. (Кроме того, XmlWriter, созданный из XElement, имеет ConformanceLevel.Fragment, что вызывает сбой XmlSerialize, если вы не используете обходной путь здесь .) и помогает нам решить проблему с XmlWriter:
public static XElement SerializeToXElement(object o)
{
var doc = new XDocument();
using (XmlWriter writer = doc.CreateWriter())
{
XmlSerializer serializer = new XmlSerializer(o.GetType());
serializer.Serialize(writer, o);
}
return doc.Root;
}