【发布时间】:2016-06-09 18:44:26
【问题描述】:
我有一个 C# 类,我想使用 XMLSerializer 对其进行序列化。但我想让它序列化为 XMLElement 或 XMLDocument。这可能吗,还是我必须将其序列化为字符串,然后将字符串解析回 XMLDocument?
【问题讨论】:
-
我也有同样的问题。你能请在这里为你工作的最终代码吗??
我有一个 C# 类,我想使用 XMLSerializer 对其进行序列化。但我想让它序列化为 XMLElement 或 XMLDocument。这可能吗,还是我必须将其序列化为字符串,然后将字符串解析回 XMLDocument?
【问题讨论】:
我也遇到过这个问题,Matt Davis 提供了一个很好的解决方案。只是发布一些代码sn-ps,因为还有更多细节。
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,您可以将其传递给 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
【讨论】: