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

时间:2009-12-22 09:59:53

标签: c# xml

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

3 个答案:

答案 0 :(得分:25)

我也有这个问题,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<T>(XmlElement element)
{
    var serializer = new XmlSerializer(typeof(T));

    return (T)serializer.Deserialize(new XmlNodeReader(element));
}

答案 1 :(得分:8)

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

答案 2 :(得分:0)

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
相关问题