简单方法:
/// <summary>
/// 将object对象序列化成XML
/// </summary>
/// <param name="o"></param>
/// <returns></returns>
public static string ObjectToXML(object o)
{
XmlSerializer ser = new XmlSerializer(o.GetType());
MemoryStream mem = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter(mem, Encoding.UTF8);
ser.Serialize(writer, o);
writer.Close();
return Encoding.Default.GetString(mem.ToArray());
}
/// <summary>
/// 将XML反序列化成对象
/// </summary>
/// <param name="s"></param>
/// <param name="t"></param>
/// <returns></returns>
public static object XMLToObject(string s, Type t)
{
XmlSerializer mySerializer = new XmlSerializer(t);
StreamReader mem2 = new StreamReader(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(s)), System.Text.Encoding.UTF8);
return mySerializer.Deserialize(mem2);
}
常用方法:
public static string ObjectToXML<T>(T t){
return ObjectToXML<T>( t, Encoding.UTF8 );
}
/// <summary>
/// 将object对象序列化成XML
/// </summary>
/// <param name="o"></param>
/// <returns></returns>
public static string ObjectToXML<T>( T t, Encoding encoding )
{
XmlSerializer ser = new XmlSerializer( t.GetType() );
Encoding utf8EncodingWithNoByteOrderMark = new UTF8Encoding(false);
using ( MemoryStream mem = new MemoryStream() )
{
using (XmlTextWriter writer = new XmlTextWriter(mem, utf8EncodingWithNoByteOrderMark))
{
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add( "", "" );
ser.Serialize( writer, t, ns );
return encoding.GetString( mem.ToArray() );
}
}
}
反序列化:
public static T XMLToObject<T>(string source)
{
return XMLToObject<T>( source, Encoding.UTF8 );
}
public static T XMLToObject<T>( string source, Encoding encoding )
{
XmlSerializer mySerializer = new XmlSerializer( typeof( T ) );
using ( MemoryStream stream = new MemoryStream( encoding.GetBytes( source ) ) )
{
return ( T )mySerializer.Deserialize( stream );
}
}
二进制
/// <summary>
/// 二进制方式序列化对象
/// </summary>
/// <param name="testUser"></param>
public static string Serialize<T>(T obj)
{
MemoryStream ms = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, obj);
return ms.ToString();
}
/// <summary>
/// 二进制方式反序列化对象
/// </summary>
/// <returns></returns>
public static T DeSerialize<T>(string str) where T:class
{
MemoryStream ms = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(str));
BinaryFormatter formatter = new BinaryFormatter();
T t = formatter.Deserialize(ms) as T;
return t;
}