''' <summary>
''' Deserializes from XML file.
''' </summary>
''' <typeparam
name="T">Type</typeparam>
''' <param
name="fileName">Name of the file.</param>
''' <returns></returns>
Public Shared Function DeserializeFromXmlFile(Of T)(ByVal fileName As String) As T
Return Deserialize(Of T)(My.Computer.FileSystem.ReadAllText(fileName))
End Function
''' <summary>
''' Deserializes the specified XML.
''' </summary>
''' <typeparam
name="T">Type</typeparam>
''' <param
name="xml">The XML.</param>
''' <returns></returns>
Public Shared Function Deserialize(Of T)(ByVal xml As String) As T
Dim serializer
= New XmlSerializer(GetType(T))
Return DirectCast(serializer.Deserialize(New XmlTextReader(New StringReader(xml))),
T)
End Function
''' <summary>
''' Serializes obj to XML file.
''' </summary>
''' <param
name="obj">The obj.</param>
''' <param
name="fileName">Name of the file.</param>
Public Shared Sub SerializeToXmlFile(ByVal obj As Object, ByVal fileName As String)
My.Computer.FileSystem.WriteAllText(fileName,
Serialize(obj), False)
End Sub
''' <summary>
''' Serializes the specified obj to
xml.
''' </summary>
''' <param
name="obj">The obj.</param>
''' <returns></returns>
Public Shared Function Serialize(ByVal obj As Object) As String
Dim returnXml As String = String.Empty
Dim serializer
= New XmlSerializer(obj.[GetType](), GetObjectTypes(obj).ToArray())
Using writer As New StringWriter(CultureInfo.CurrentCulture)
serializer.Serialize(New XmlTextWriter(writer),
obj)
returnXml = writer.ToString()
End Using
Return returnXml
End Function
Private Shared Function GetObjectTypes(ByVal input As Object) As List(Of Type)
Dim types
= New List(Of Type)()
Dim currentAssembly
= input.[GetType]().Assembly
Dim currentType As Type
= input.[GetType]()
'Query our types.
We could also load any other assemblies and
'query them for
any types that inherit from the currentType
For Each tempType As Type In currentAssembly.GetTypes()
If Not tempType.IsAbstract AndAlso Not tempType.IsInterface AndAlso currentType.IsAssignableFrom(tempType) Then
types.Add(tempType)
End If
Next
Return types
End Function
C#
/// <summary>
/// Deserializes
from XML file.
/// </summary>
/// <typeparam
name="T">Type</typeparam>
/// <param
name="fileName">Name of the file.</param>
/// <returns></returns>
public static T
DeserializeFromXmlFile<T>(string fileName)
{
return Deserialize<T>(Microsoft.VisualBasic.FileIO.FileSystem.ReadAllText(fileName));
}
/// <summary>
/// Deserializes
the specified XML.
/// </summary>
/// <typeparam
name="T">Type</typeparam>
/// <param
name="xml">The XML.</param>
/// <returns></returns>
public static T
Deserialize<T>(string xml)
{
var serializer
= new XmlSerializer(typeof(T));
return (T)serializer.Deserialize(new XmlTextReader(new StringReader(xml)));
}
/// <summary>
/// Serializes
obj to XML file.
/// </summary>
/// <param
name="obj">The obj.</param>
/// <param
name="fileName">Name of the file.</param>
public static void SerializeToXmlFile(object obj, string fileName)
{
Microsoft.VisualBasic.FileIO.FileSystem.WriteAllText(fileName,
Serialize(obj), false);
}
/// <summary>
/// Serializes
the specified obj to xml.
/// </summary>
/// <param
name="obj">The obj.</param>
/// <returns></returns>
public static string Serialize(object obj)
{
string returnXml
= string.Empty;
var serializer
= new XmlSerializer(obj.GetType(),
GetObjectTypes(obj).ToArray());
using (StringWriter writer
= new StringWriter(CultureInfo.CurrentCulture))
{
serializer.Serialize(new XmlTextWriter(writer),
obj);
returnXml
= writer.ToString();
}
return returnXml;
}
private static List<Type>
GetObjectTypes(object input)
{
var types
= new List<Type>();
var currentAssembly
= input.GetType().Assembly;
Type currentType
= input.GetType();
//Query
our types. We could also load any other assemblies and
//query
them for any types that inherit from the currentType
foreach (Type tempType in currentAssembly.GetTypes())
{
if (!tempType.IsAbstract
&& !tempType.IsInterface && currentType.IsAssignableFrom(tempType))
{
types.Add(tempType);
}
}
return types;
}