Imports System.Collections.Generic
Imports System.Collections
Imports System.Xml.Serialization
Console.WriteLine("Environment version: " & Environment.Version.ToString() & Environment.NewLine)
Dim xml as String = GetXml()
Dim filename = "Question76506717.xml"
File.WriteAllText(filename, xml)
Dim test = DeserializeFromFile(Of XmlTest)(filename)
For Each item in test.TypeList
Select Case item.GetType()
Console.WriteLine("Type is type 1, value is {0}.", item.Tekst)
Console.WriteLine("Type is type 3, value is {0}.", item.Tekst)
Console.WriteLine("Type is type 3, value is {0}.", item.Tekst)
Throw New Exception(String.Format("Unknown type {0}", item.GetType()))
Console.WriteLine("Deserialized and re-serialized {0}:", test)
Function GetXml() As String
Dim xml as String = <xmltest>
Public Function DeserializeFromFile(Of T)(filename As String) As T
Using stream = File.OpenRead(filename)
Return DirectCast(New XmlSerializer(GetType(T)).Deserialize(stream), T)
<XmlElement("type1", GetType(Type1)), XmlElement("type2", GetType(Type2)), XmlElement("type3", GetType(Type3))>
Public Property TypeList As List(Of TypeBase) = New List(Of TypeBase) ()
Public Property Tekst As String
Public Module XmlSerializationHelper
<System.Runtime.CompilerServices.Extension> _
Public Function LoadFromXML(Of T)(xmlString As String) As T
Using reader As New StringReader(xmlString)
Return DirectCast(New XmlSerializer(GetType(T)).Deserialize(reader), T)
<System.Runtime.CompilerServices.Extension> _
Public Function GetXml(Of T)(obj As T, Optional omitStandardNamespaces As Boolean = False) As String
Dim ns As XmlSerializerNamespaces = Nothing
If omitStandardNamespaces Then
ns = New XmlSerializerNamespaces()
<System.Runtime.CompilerServices.Extension> _
Public Function GetXml(Of T)(obj As T, ns as XmlSerializerNamespaces) As String
Using textWriter = New StringWriter()
Dim settings = New XmlWriterSettings() With { _
Using xmlWriter = System.Xml.XmlWriter.Create(textWriter, settings)
Dim serializer as New XmlSerializer(obj.GetType())
serializer.Serialize(xmlWriter, obj, ns)
Return textWriter.ToString()
<System.Runtime.CompilerServices.Extension> _
Public Function GetOuterXml(node as XmlNode, Optional indent as Boolean = true) as String
Using textWriter = New StringWriter()
Dim settings = New XmlWriterSettings() With { _
.OmitXmlDeclaration = true _
Using xmlWriter = System.Xml.XmlWriter.Create(textWriter, settings)
Return textWriter.ToString()