繁体   English   中英

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

[英]How do I convert a C# class to an XMLElement or XMLDocument

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM