How to serialize an object into XML
How can I serialize开发者_StackOverflow a .net object into XML and then de-serialize it back?
In VB.Net you would first add some attributes to your class (if needed)
Public Class Class1
<XmlAttribute("value")>
Public Property Value As String
<XmlElement("name")>
Public Property Name As String
End Class
And then serialize it using
Dim p As New Class1()
p.Name = "test"
Dim sw1 = New StringWriter()
Dim xs1 As New XmlSerializer(GetType(Class1))
xs1.Serialize(New XmlTextWriter(sw1), p)
Console.WriteLine(sw1.ToString())
This is possible with Object and string extension methods.
using System.IO;
using System.Xml.Serialization;
namespace XmlExtensionMethods
{
/// <summary>
/// Provides extension methods useful for XML Serialization and deserialization.
/// </summary>
public static class XMLExtensions
{
/// <summary>
/// Extension method that takes objects and serialized them.
/// </summary>
/// <typeparam name="T">The type of the object to be serialized.</typeparam>
/// <param name="source">The object to be serialized.</param>
/// <returns>A string that represents the serialized XML.</returns>
public static string SerializeXML<T>(this T source) where T : class, new()
{
source.CheckNull("Object to be serialized.");
var serializer = new XmlSerializer(typeof(T));
using (var writer = new StringWriter())
{
serializer.Serialize(writer, source);
return writer.ToString();
}
}
/// <summary>
/// Extension method to string which attempts to deserialize XML with the same name as the source string.
/// </summary>
/// <typeparam name="T">The type which to be deserialized to.</typeparam>
/// <param name="XML">The source string</param>
/// <returns>The deserialized object, or null if unsuccessful.</returns>
public static T DeserializeXML<T>(this string XML) where T : class, new()
{
XML.CheckNull("XML-string");
var serializer = new XmlSerializer(typeof(T));
using (var reader = new StringReader(XML))
{
try { return (T)serializer.Deserialize(reader); }
catch { return null; } // Could not be deserialized to this type.
}
}
}
}
}
You could use it like this:
string savestring;
public void Save()
{
savestring = mySerializableObject.SerializeXML<MySerializableClass>();
}
public void Load()
{
mySerializableObject = savestring.DeserializeXML<MySerializableClass>();
}
PS: I do not take credit for these extension methods.
VB.NET
Public Shared Function SerializeObj(obj As Object) As String
Dim xs As New System.Xml.Serialization.XmlSerializer(obj.GetType)
Dim w As New IO.StringWriter
xs.Serialize(w, obj)
Return w.ToString
End Function
Going back is a little more complicated, you would declare an xml document and pull the data out of that.
精彩评论