Как преобразовать класс C # в XMLElement или XMLDocument - PullRequest
12 голосов
/ 22 декабря 2009

У меня есть класс C # , который я хотел бы сериализовать с использованием XMLSerializer. Но я хотел бы, чтобы он был сериализован в XMLElement или XMLDocument. Это возможно, или мне нужно сериализовать его в строку, а затем проанализировать строку обратно в XMLDocument?

Ответы [ 3 ]

26 голосов
/ 24 сентября 2012

У меня тоже была эта проблема, и Мэтт Дэвис предоставил отличное решение. Просто отправьте несколько фрагментов кода, так как есть еще несколько деталей.

Сериализация:

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));
}
9 голосов
/ 22 декабря 2009

Вы можете создать новый XmlDocument, а затем вызвать CreateNavigator (). AppendChild (). Это даст вам XmlWriter, который вы можете передать методу Serialize, который будет выгружаться в корень документа.

0 голосов
/ 09 июня 2016
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...