首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

求一段C#XmlSerializer的对象序列化/反序列化的源码例子。看有序列化和反序列化。解决思路

2012-04-14 
求一段C#XmlSerializer的对象序列化/反序列化的源码例子。看有序列化和反序列化。如题。源码越完整越好。快,准

求一段C#XmlSerializer的对象序列化/反序列化的源码例子。看有序列化和反序列化。
如题。

源码越完整越好。

快,准,狠者先得分。

其它废话别发上来。

[解决办法]
实现序列化接口后,需要你提供2个方法


说白了就是把对象用字符串表示出来.而反序列话要能够还原



比如:如果你的对象有3个属性
class My
{
public string name;
public string age;
public string sex;

public My(string n,string a,string s)
{
name=n;
age=a;
sex=s;
}
}

他的序列话方法可以写成:
--> string.format("{0}|{1}|{2}",name,age,sex);

与之对应的,反序列话写成
string[] info = "???|???|???".split('|');
--> new My(info[0],info[1],info[2])


----------
示意一下
[解决办法]
序列化:
if (Templates != null)
{
String strFileName = System.Environment.CurrentDirectory + "\\Config\\Templates.XML";
XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<Template>));
try
{
FileStream fs = new FileStream(strFileName, FileMode.Create);
xmlSerializer.Serialize(fs, Templates);
fs.Close();
}
catch (Exception ex)
{
ErrorMsg = "DataFile Error (" + strFileName + "):" + ex.Message + ".\n" + "Please check your Xml file.";
}
}

反序列化:
String strFileName = System.Environment.CurrentDirectory + "\\Config\\Templates.XML";
XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<Template>));
try
{
FileStream fs = new FileStream(strFileName, FileMode.OpenOrCreate);
Templates = (List<Template>)(xmlSerializer.Deserialize(fs));
fs.Close();
}
catch (Exception ex)
{
ErrorMsg = "DataFile Error (" + strFileName + "):" + ex.Message + ".\n" + "Please check your Xml file.";
}
[解决办法]

C# code
#region 序列化和反序列化        /// <summary>        /// 序列化        /// </summary>        /// <param name="collect"></param>        public void Serialize( object obj ) {            string path = Application.StartupPath + "\\Data.db";            if( File.Exists( path ) )                File.Delete( path );            FileStream fs = new FileStream( path, FileMode.Create );            BinaryFormatter formatter = new BinaryFormatter();            try {                formatter.Serialize( fs, obj );            } catch( SerializationException exp ) {                throw exp;            } finally {                fs.Close();            }        }        /*         * SoapFormatter         * XmlSerializer         * BinaryFormatter         */        /// <summary>        /// 反序列化        /// </summary>        /// <returns></returns>        public object Deserialize( ) {            string path = Application.StartupPath + "\\Data.db";            if( !File.Exists( path ) )                return null;            FileStream fs = new FileStream( path, FileMode.Open );            BinaryFormatter formatter = new BinaryFormatter();            try {                return (object)formatter.Deserialize( fs );            } catch( SerializationException exp ) {                throw exp;            } finally {                fs.Close();            }        }        #endregion
------解决方案--------------------


C# code
 /// <summary>        /// 对象序列化,对象必须具有可序列化标记([Serializable]),且有读写方法的公共属性(public)        /// </summary>        /// <param name="type">对象类型</param>        /// <param name="serialObject"></param>        /// <returns></returns>        public static string Serialization(Type type, object serialObject)        {            StringBuilder sb = new StringBuilder();            TextWriter writer = new StringWriter(sb);            XmlSerializer serializer = new XmlSerializer(type);            serializer.Serialize(writer, serialObject);            string result = sb.ToString().Replace("utf-16", "utf-8");            return result;        }        /// <summary>        /// 对象反序列化        /// </summary>        /// <param name="type"></param>        /// <param name="content">xml</param>        /// <returns></returns>        public static object Deserialization(Type type, string xmlString)        {            // XmlTextReader tr = new XmlTextReader(new StringReader(xmlString));            XmlReader reader = XmlReader.Create(new StringReader(xmlString));            XmlSerializer serializer2 = new XmlSerializer(type);            return serializer2.Deserialize(reader);        } 

热点排行