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

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

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

我也有这个问题,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; } 

反序列化:

 public static T DeserializeFromXmlElement(XmlElement element) { var serializer = new XmlSerializer(typeof(T)); return (T)serializer.Deserialize(new XmlNodeReader(element)); } 
 Public Shared Function ConvertClassToXml(source As Object) As XmlDocument Dim doc As New XmlDocument() Dim xmlS As New XmlSerializer(source.GetType) Dim stringW As New StringWriter xmlS.Serialize(stringW, source) doc.InnerXml = stringW.ToString Return doc End Function Public Shared Function ConvertClassToXmlString(source As Object) As String Dim doc As New XmlDocument() Dim xmlS As New XmlSerializer(source.GetType) Dim stringW As New StringWriter xmlS.Serialize(stringW, source) Return stringW.ToString End Function Public Shared Function ConvertXmlStringtoClass(Of T)(source As String) As T Dim xmlS As New XmlSerializer(GetType(T)) Dim stringR As New StringReader(source) Return CType(xmlS.Deserialize(stringR), T) End Function Public Shared Function ConvertXmlToClass(Of T)(doc As XmlDocument) As T Dim serializer = New XmlSerializer(GetType(T)) Return DirectCast(serializer.Deserialize(doc.CreateNavigator.ReadSubtree), T) End Function