Imports System.IO
Imports System.Xml
Imports System.Xml.Serialization
Public Class XMLTools
Public Shared Function Serialize(Of T)(value As T, Optional ByVal indented As Boolean = False) As String
If value Is Nothing Then
Throw New Exception("XMLSerializer - The value passed is null!")
Return ""
End If
Try
Dim xmlserializer As New XmlSerializer(GetType(T))
Dim serializeXml As String = ""
Using stringWriter As New StringWriter()
Using writer As XmlWriter = XmlWriter.Create(stringWriter)
xmlserializer.Serialize(writer, value)
serializeXml = stringWriter.ToString()
End Using
If indented Then
serializeXml = Beautify(serializeXml)
End If
End Using
Return serializeXml
Catch ex As Exception
Throw New Exception(ex.Message)
Return ""
End Try
End Function
Public Shared Function Deserialize(Of T)(value As String) As T
Try
Dim returnvalue As New Object()
Dim xmlserializer As New XmlSerializer(GetType(T))
Dim reader As TextReader = New StringReader(value)
returnvalue = xmlserializer.Deserialize(reader)
reader.Close()
Return DirectCast(returnvalue, T)
Catch ex As Exception
Throw New Exception(ex.Message)
Return Nothing
End Try
End Function
Public Shared Sub SerializeToFile(Of T)(value As T, filePath As String, Optional ByVal indented As Boolean = False)
If value Is Nothing Then
Throw New Exception("XMLSerializer - The value passed is null!")
End If
Try
Dim xmlserializer As New XmlSerializer(GetType(T))
Using fileWriter As StreamWriter = New StreamWriter(filePath)
If indented Then
Using stringWriter As New StringWriter()
Using writer As XmlWriter = XmlWriter.Create(stringWriter)
xmlserializer.Serialize(writer, value)
fileWriter.WriteLine(Beautify(stringWriter.ToString()))
End Using
End Using
Else
Using writer As XmlWriter = XmlWriter.Create(fileWriter)
xmlserializer.Serialize(writer, value)
End Using
End If
End Using
Catch ex As Exception
Throw New Exception(ex.Message)
End Try
End Sub
Public Shared Function DeserializeFromFile(Of T)(filePath As String) As T
Try
Dim returnvalue As New Object()
Dim xmlserializer As New XmlSerializer(GetType(T))
Using reader As TextReader = New StreamReader(filePath)
returnvalue = xmlserializer.Deserialize(reader)
End Using
Return DirectCast(returnvalue, T)
Catch ex As Exception
Throw New Exception(ex.Message)
Return Nothing
End Try
End Function
Public Shared Function Beautify(obj As Object) As String
Dim doc As New XmlDocument()
If obj.[GetType]() Is GetType(String) Then
If Not [String].IsNullOrEmpty(DirectCast(obj, String)) Then
Try
doc.LoadXml(DirectCast(obj, String))
Catch ex As Exception
Throw New Exception("XMLIndenter - Wrong string format! [" + ex.Message & "]")
Return ""
End Try
Else
Throw New Exception("XMLIndenter - String is null!")
Return ""
End If
ElseIf obj.[GetType]() Is GetType(XmlDocument) Then
doc = DirectCast(obj, XmlDocument)
Else
Throw New Exception("XMLIndenter - Not supported type!")
Return ""
End If
Dim returnValue As String = ""
Using w As New MemoryStream()
Using writer As New XmlTextWriter(w, Encoding.Unicode)
writer.Formatting = Formatting.Indented
doc.WriteContentTo(writer)
writer.Flush()
w.Seek(0L, SeekOrigin.Begin)
Using reader As New StreamReader(w)
returnValue = reader.ReadToEnd()
End Using
End Using
End Using
End Function
End Class