如何将C#类转换为XMLElement或XMLDocument

Kon*_*tin 12 c# xml

我有一个C#类,我想使用XMLSerializer序列化.但我想将它序列化为XMLElement或XMLDocument.这是可能的还是我必须将它序列化为String,然后将字符串解析回XMLDocument?

Dav*_*sen 28

我也有这个问题,Matt Davis提供了一个很好的解决方案.只需发布一些代码片段,因为还有一些细节.

连载:

public static XmlElement SerializeToXmlElement(object o)
{
    XmlDocument doc = new XmlDocument();

    using(XmlWriter writer = doc.CreateNavigator().AppendChild())
    {
        new XmlSerializer(o.GetType()).Serialize(writer, o);
    }

    return doc.DocumentElement;
}
Run Code Online (Sandbox Code Playgroud)

反序列化:

public static T DeserializeFromXmlElement<T>(XmlElement element)
{
    var serializer = new XmlSerializer(typeof(T));

    return (T)serializer.Deserialize(new XmlNodeReader(element));
}
Run Code Online (Sandbox Code Playgroud)

  • 警告,microperf nit:在反序列化时,最好在XmlNode周围使用新的XmlNodeReader()作为XmlReader源,而不是将其转换为字符串并返回.字符串转换使用大约两倍的挂钟时间和一些更多的内存(诚然,在正常情况下不多,但NodeReader方法也感觉更干净). (2认同)

nit*_*one 9

您可以创建一个新的XmlDocument,然后调用CreateNavigator().AppendChild().这将为您提供一个XmlWriter,您可以将其传递给将转储到doc根目录的Serialize方法.