序列化,反序列化(xml)字符串
2011-12-20 15:55
369 查看
简单方法:
/// <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;
}
/// <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;
}
相关文章推荐
- 【C#】解决进行反序列化时出错:。InnerException 消息是“反序列化对象 属于类型 System.String 时出现错误。读取 XML 数据时,超出最大字符串内容长度配额 (8192)。
- 实体类对象与XML字符串的序列化和反序列化(示例)
- php json与xml序列化/反序列化
- XML和实体序列化和反序列化
- 对象序列化成Json字符串 及 反序列化成对象
- 序列化与反序列化 - BinaryFormatter二进制(.dat)、SoapFormatter(.soap)、XmlSerializer(.xml)
- 对象序列化反序列化为xml
- fastJson序列化和反序列化 中空字符串的处理
- 一个经过改良的XMLHelper(包含了序列化,反序列化,创建xml文件,读取节点
- 将对象序列化,反序列化到XML
- XML序列化和反序列化相关
- XML序列化和反序列化
- XML和实体类之间相互转换(序列化和反序列化)
- XmlSerializer 对象的Xml序列化和反序列化,XMLROOT别名设置
- Xml序列化和反序列化对象-使用MemoryStream-实践
- c# XML和实体类之间相互转换(序列化和反序列化)
- 对象的Xml序列化和反序列化
- c# XML和实体类之间相互转换(序列化和反序列化)
- c# XML和实体类之间相互转换(序列化和反序列化)
- Xml与对象之间的序列化、反序列化