c# 代码
- /// <summary><summary></summary>
- /// Serializes object to xml string.
- /// </summary>
- public static string ObjectToXml(object serializableObject)
- {
- StringWriter sw = new StringWriter();
- XmlSerializer serial = new XmlSerializer(serializableObject.GetType());
- serial.Serialize(sw, serializableObject);
- return sw.ToString();
- }
- /// <summary><summary></summary>
- /// deserialize xml to object.
- /// </summary>
- /// <param name="xmlString">serialized xml </param>
- /// <param name="aimObjectType"> the type of target object</param>
- /// <returns><returns></returns>Deserialized object.</returns>
- public static object XmlToObject(string xmlString, Type aimObjectType)
- {
- XmlSerializer xs = new XmlSerializer(aimObjectType);
- StringReader sr = new StringReader(xmlString);
- Object returnedObject = xs.Deserialize(sr);
- return returnedObject;
- }
- ///<summary></summary> <summary><summary></summary>
- /// Serializes serializable object to base64 string.
- /// </summary><summary></summary>
- public static string Obj2Base64String(object serializableObject)
- {
- byte[] resultBytes = null;
- System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter
- = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
- MemoryStream stream = new MemoryStream();
- formatter.Serialize(stream, serializableObject);
- resultBytes = stream.ToArray();
- stream.Close();
- string returnedData = Convert.ToBase64String(resultBytes);
- return returnedData;
- }
- ///<summary></summary> <summary><summary></summary>
- /// Deserializes base64 string to object.
- /// </summary><summary></summary>
- public static object Base64String2Obj(string deserializedString)
- {
- System.Runtime.Serialization.Formatters.Binary.BinaryFormatter formatter
= new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); - MemoryStream stream = new MemoryStream();
- byte[] middata = Convert.FromBase64String(deserializedString);
- stream.Write(middata, 0, middata.Length);
- //Pay attention to the following line. don't forget this line.
- stream.Seek(0, SeekOrigin.Begin);
- object returnedData = formatter.Deserialize(stream);
- stream.Close();
- return returnedData;
- }
第一个序列化,反序列化方式,采用System.Xml.Serialization namespace 下的XmlSerializer,简单序列化模式。该方式仅仅能序列化strong type 对象。Type可没有attribute [Serializeble]的支持。
第二种 采用System.Runtime.Serialization.Formatters.Binary.BinaryFormatter ,能够比较智能的对大量strong type or week type 进行序列化,并且能够解决第一种模式中当遇到循环引用对象造成的序列化失败的问题,但每个序列化type都必须attribute [Serializeble]的支持。