欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Xml序列化
XML序列化是將對象的公共屬性和字段轉換為XML格式,以便存儲或傳輸的過(guò)程。反序列化則是從XML輸出中重新創(chuàng )建原始狀態(tài)的對象。XML序列化中最主要的類(lèi)是XmlSerializer類(lèi)。它的最重要的方法是Serialize和Deserialize方法,它位于System.Xml.Serialization命名空間。

一、XML序列化基本要點(diǎn)

  在本節開(kāi)始之前,首先來(lái)看一個(gè)最簡(jiǎn)單的示例:

namespace 學(xué)習測試{    class Program    {        static void Main(string[] args)        {            Person p = new Person(1, "劉備", 176);            string xmlString = "";            //xml序列化開(kāi)始            using (MemoryStream ms = new MemoryStream())            {                Type t = p.GetType();                XmlSerializer xml = new XmlSerializer(t);                xml.Serialize(ms, p);                byte[] arr = ms.ToArray();                xmlString = Encoding.UTF8.GetString(arr, 0, arr.Length);                ms.Close();            }            Console.WriteLine(xmlString);            Console.ReadKey();        }    }    public class Person    {        //必須定義一個(gè)無(wú)參數構造函數,否則無(wú)法序列化(當然完全不寫(xiě)構造函數也是可以序列化的,因為有個(gè)默認的無(wú)參構造函數)        public Person() { }        public Person(int id, string name, int age)        {            Id = id;            Name = name;            //Age = age;        }        public int Id { get; set; }        public string Name { get; set; }        //私有字段        private int Age { get; set; }        //只讀屬性        private int height;        public int Height { get { return height; } }    }}

  該代碼輸出如下:

  

  從以上輸出,我們可以得出結論,必須要求無(wú)參構造函數,默認的也可以。但注意當默認的無(wú)參構造函數比覆蓋時(shí),要補上一個(gè)無(wú)參構造函數。另外,私有屬性,只讀屬性是不能被序列化的。

  更多的注意事項:

  1. 要序列化的類(lèi)必須有默認的構造的構造函數,才能使用XmlSerializer序列化;
  2. 方法不能被序列化;
  3. 索引器、私有字段或只讀屬性(只讀集合屬性除外)不能被序列化;
  4. 需要序列化的類(lèi)都必須有一個(gè)無(wú)參的構造函數
  5. 枚舉變量可序列化為字符串,無(wú)需用[XmlInclude]
  6. 導出非基本類(lèi)型對象,都必須用[XmlInclude]事先聲明。該規則遞歸作用到子元素
  7. Attribute中的IsNullable參數若等于false,表示若元素為null則不顯示該元素。(針對值類(lèi)型有效)
  8. 某些類(lèi)就是無(wú)法XML序列化的(即使使用了[XmlInclude])
  • IDictionary(如HashTable)
  • 父類(lèi)對象賦予子類(lèi)對象值的情況
  • 對象間循環(huán)引用

  9.對于無(wú)法XML序列化的對象,可考慮

  • 使用自定義xml序列化(實(shí)現IXmlSerializable接口)
  • 實(shí)現IDictionary的類(lèi),可考慮(1)用其它集合類(lèi)替代;(2)用類(lèi)封裝之,并提供Add和this函數
  • 某些類(lèi)型需要先經(jīng)過(guò)轉換,然后才能序列化為 XML。如XML序列化System.Drawing.Color,可先用ToArgb()將其轉換為整數
  • 過(guò)于復雜的對象用xml序列化不便的話(huà),可考慮用二進(jìn)制序列化。

  不想序列化時(shí):

  • 當不想序列化一個(gè)屬性時(shí),使用[System.Xml.Serialization.XmlIgnore]標記,能用于屬性;
  • [NonSerializable]應用于屬性無(wú)效,能用于類(lèi),結構體等

  默認構造函數是必須的,因為反序列化本質(zhì)上使用的是反射,需要默認構造函數來(lái)實(shí)例化類(lèi),如果去掉其中的默認構造函數,則編譯沒(méi)有問(wèn)題,但運行就會(huì )報錯。

  盡量不要將比較大的屬性放在默認構造函數初始化,那會(huì )導致在反序列化時(shí)對列表初始化兩次:默認構造函數中執行一次,反序列化時(shí)從XML文檔讀取再執行一次。

二、改變XML序列化的默認值

  通常,在XML序列化的過(guò)程中,有很多東西是自動(dòng)生成的,例如XML命名空間,編碼等等。

  1、去除默認的命名空間與前綴:

  XmlSerializerNamespaces ns = new XmlSerializerNamespaces();  ns.Add("", "");  //第一個(gè)參數是前綴,第二個(gè)參數是命名空間  //然后在序列化的時(shí)候,指定自定義命名空間  xml.Serialize(ms, p, ns);

  輸出對比:

  

  當然,這個(gè)方法也可以用于生成你想要的自定義命名空間。

  2、去除XML聲明:頂部的 <?xml version="1.0" encoding="utf-8"?>

        public static string ObjectToXmlSerializer(Object Obj)        {            XmlWriterSettings settings = new XmlWriterSettings();            //去除xml聲明            settings.OmitXmlDeclaration = true;            settings.Encoding = Encoding.Default;            System.IO.MemoryStream mem = new MemoryStream();            using (XmlWriter writer = XmlWriter.Create(mem, settings))            {                //去除默認命名空間xmlns:xsd和xmlns:xsi                XmlSerializerNamespaces ns = new XmlSerializerNamespaces();                ns.Add("", "");                XmlSerializer formatter = new XmlSerializer(Obj.GetType());                formatter.Serialize(writer, Obj, ns);            }            return Encoding.Default.GetString(mem.ToArray());        }

  輸出:

  

  3、換行縮進(jìn)

  settings.Indent = true;

  當XmlWriterSettings如此設置后,輸出的XML為:

  

  4、指定縮進(jìn)字符

  settings.IndentChars = "--";

  輸出如下:

  

  XmlWriterSettings更多設置屬性如下:

成員說(shuō)明
CloseOutput獲取或設置一個(gè)值,該值指示在調用 Close 方法時(shí),XmlWriter 是否還應該關(guān)閉基礎流或 TextWriter。
Encoding獲取或設置要使用的文本編碼的類(lèi)型。
Indent獲取或設置一個(gè)值,該值指示是否縮進(jìn)元素。
IndentChars獲取或設置縮進(jìn)時(shí)要使用的字符串。
NamespaceHandling獲取或設置一個(gè)值,該值指示在編寫(xiě) XML 內容時(shí),XmlWriter 是否應移除重復的命名空間聲明。 的默認是輸出程序中出現的所有命名空間聲明。
NewLineChars獲取或設置要用于分行符的字符串
NewLineHandling獲取或設置一個(gè)值,該值指示是否將輸出中的分行符正?;?。
NewLineOnAttributes獲取或設置一個(gè)值,該值指示是否將屬性寫(xiě)入新行。
OmitXmlDeclaration獲取或設置一個(gè)值指示省略 XML 聲明。
Encoding獲取或設置要使用的文本編碼的類(lèi)型。
Reset方法重置以上屬性

  http://msdn.microsoft.com/zh-cn/library/system.xml.xmlwritersettings(v=vs.110).aspx

三、實(shí)現序列化接口IXmlSerializable

  實(shí)現IXmlSerializable接口之后,我們能夠自定義類(lèi)序列化的方式。

  該接口包含3個(gè)方法:

XmlSchema GetSchema();void ReadXml(XmlReader reader);void WriteXml(XmlWriter writer);

  簡(jiǎn)單示例:

namespace 自定義序列化{    class Program    {        static void Main(string[] args)        {            Person p = new Person();            p.Id = 1;            p.Name = "劉備";            string str = ObjectToXmlSerializer(p);            Console.WriteLine(str);            Person p1 = ObjectToXmlDESerializer<Person>(str);            Console.WriteLine("我的名字是:" + p1.Name);            Console.ReadKey();        }        //序列化Xml        public static string ObjectToXmlSerializer(Object Obj)        {            string XmlString = "";            XmlWriterSettings settings = new XmlWriterSettings();            //去除xml聲明            //settings.OmitXmlDeclaration = true;            settings.Indent = true;            settings.Encoding = Encoding.Default;            using (System.IO.MemoryStream mem = new MemoryStream())            {                using (XmlWriter writer = XmlWriter.Create(mem, settings))                {                    //去除默認命名空間xmlns:xsd和xmlns:xsi                    XmlSerializerNamespaces ns = new XmlSerializerNamespaces();                    ns.Add("", "");                    XmlSerializer formatter = new XmlSerializer(Obj.GetType());                    formatter.Serialize(writer, Obj, ns);                }                XmlString = Encoding.Default.GetString(mem.ToArray());            }            return XmlString;        }        //反序列化        public static T ObjectToXmlDESerializer<T>(string str)where T : class        {            object obj;            using (System.IO.MemoryStream mem = new MemoryStream(Encoding.Default.GetBytes(str)))            {                using (XmlReader reader = XmlReader.Create(mem))                {                    XmlSerializer formatter = new XmlSerializer(typeof(T));                    obj = formatter.Deserialize(reader);                }            }            return obj as T;        }    }    public class Person    {        public int Id { get; set; }        public string Name { get; set; }    }    public class PersonSerializer : IXmlSerializable    {        private Person p;        public int Id { get; set; }        public string Name { get; set; }        #region IXmlSerializable 成員        System.Xml.Schema.XmlSchema IXmlSerializable.GetSchema()        {            throw new NotImplementedException();        }        //如果這個(gè)方法默認則報:XML 文檔(2, 2)中有錯誤。        void IXmlSerializable.ReadXml(XmlReader reader)        {            reader.ReadElementString("Person");        }        void IXmlSerializable.WriteXml(XmlWriter writer)        {            writer.WriteElementString("Id", Id.ToString());            writer.WriteElementString("Name", Name);        }        #endregion    }}

  輸出如下:

  

  我們都知道,接口是不支持序列化的。下面來(lái)做個(gè)有用的示例,實(shí)現IList<T>的序列化與反序列化

namespace IList<T>的序列化與反序列化{    class Program    {        static void Main(string[] args)        {            Woman w1 = new Woman() { Id = 1, Name = "貂蟬" };            Woman w2 = new Woman() { Id = 2, Name = "西施" };            List<Woman> ListWoman = new List<Woman>();            ListWoman.Add(w1);            ListWoman.Add(w2);            Person p = new Person();            p.Id = 1;            p.Name = "劉備";            p.ListWoman = ListWoman;            string str = ObjectToXmlSerializer(p);            Console.WriteLine(str);            Person p1 = ObjectToXmlDESerializer<Person>(str);            Console.WriteLine("我的名字是:" + p1.Name + "我的老婆有:");            foreach (Woman w in p1.ListWoman)            {                Console.WriteLine(w.Name);            }            Console.ReadKey();        }        //序列化Xml        public static string ObjectToXmlSerializer(Object Obj)        {            string XmlString = "";            XmlWriterSettings settings = new XmlWriterSettings();            //去除xml聲明            //settings.OmitXmlDeclaration = true;            settings.Indent = true;            settings.Encoding = Encoding.Default;            using (System.IO.MemoryStream mem = new MemoryStream())            {                using (XmlWriter writer = XmlWriter.Create(mem, settings))                {                    //去除默認命名空間xmlns:xsd和xmlns:xsi                    XmlSerializerNamespaces ns = new XmlSerializerNamespaces();                    ns.Add("", "");                    XmlSerializer formatter = new XmlSerializer(Obj.GetType());                    formatter.Serialize(writer, Obj, ns);                }                XmlString = Encoding.Default.GetString(mem.ToArray());            }            return XmlString;        }        //反序列化        public static T ObjectToXmlDESerializer<T>(string str) where T : class        {            object obj;            using (System.IO.MemoryStream mem = new MemoryStream(Encoding.Default.GetBytes(str)))            {                using (XmlReader reader = XmlReader.Create(mem))                {                    XmlSerializer formatter = new XmlSerializer(typeof(T));                    obj = formatter.Deserialize(reader);                }            }            return obj as T;        }    }    public class Person : IXmlSerializable    {        public int Id { get; set; }        public string Name { get; set; }        public IList<Woman> ListWoman { get; set; }        #region IXmlSerializable 成員        System.Xml.Schema.XmlSchema IXmlSerializable.GetSchema()        {            throw new NotImplementedException();        }        void IXmlSerializable.ReadXml(XmlReader reader)        {
       //一定要特別注意配對問(wèn)題,否則很容易反序列化集合出現只能夠讀取第一個(gè)的情況
reader.ReadStartElement(
"Person"); Id = Convert.ToInt32(reader.ReadElementString("Id")); Name = reader.ReadElementString("Name"); //我也不知道為什么,復雜類(lèi)型只能夠另外定義一個(gè),獲得值之后再給原來(lái)的賦值 List<Woman> ListWoman2 = new List<Woman>(); reader.ReadStartElement("ListWoman"); while (reader.IsStartElement("Woman")) { Woman w = new Woman(); reader.ReadStartElement("Woman"); w.Id = Convert.ToInt32(reader.ReadElementString("Id")); w.Name = reader.ReadElementString("Name"); reader.ReadEndElement(); reader.MoveToContent(); ListWoman2.Add(w); } ListWoman = ListWoman2; reader.ReadEndElement(); reader.ReadEndElement(); } void IXmlSerializable.WriteXml(XmlWriter writer) {
       //這里是不需要WriteStart/End Person的 writer.WriteElementString(
"Id", Id.ToString()); writer.WriteElementString("Name", Name); //有重載,想設置命名空間,只需在參數加上 writer.WriteStartElement("ListWoman"); foreach (Woman item in ListWoman) { PropertyInfo[] ProArr = item.GetType().GetProperties(); writer.WriteStartElement("Woman"); foreach (PropertyInfo p in ProArr) { writer.WriteElementString(p.Name, p.GetValue(item, null).ToString()); } writer.WriteEndElement(); } writer.WriteEndElement(); } #endregion } public class Woman { public int Id { get; set; } public string Name { get; set; } }}

  輸出如下:

  

  以上代碼是能夠直接用于序列化數組的,也就是IList<Person>的,下面在貼上兩個(gè)序列化與反序列化IList<T>的方法:

        //序列化Xml        public static string ListToXmlSerializer<T>(IList<T> ListT)        {            XmlSerializer ser = new XmlSerializer(ListT.GetType());            System.IO.MemoryStream mem = new MemoryStream();            XmlWriterSettings settings = new XmlWriterSettings();            settings.Indent = true;            settings.OmitXmlDeclaration = false;            settings.Encoding = Encoding.UTF8;            XmlWriter writer = XmlWriter.Create(mem, settings);            ser.Serialize(writer, ListT);            writer.Close();            string strtmp = Encoding.UTF8.GetString(mem.ToArray());            return strtmp;        }        //反序列化Xml        public static List<T> XmlToListSerializer<T>(Stream stream)        {            string XmlPath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + @"\OutLine\" + typeof(T).Name + ".xml";            using (StreamReader sr = new StreamReader(stream, System.Text.Encoding.UTF8))            {                XmlSerializer ser = new XmlSerializer(typeof(List<T>));                var listsch = ser.Deserialize(sr);                List<T> reses = listsch as List<T>;                return reses;            }        }

  下面給出一個(gè)序列化與反序列化通過(guò)反射的復雜對象的示例:

using System.Linq.Expressions;namespace 控制臺___學(xué)習測試{    class Program    {        static void Main(string[] args)        {            Woman w1 = new Woman() { Id = 1, Name = "貂蟬" };            Woman w2 = new Woman() { Id = 2, Name = "西施" };            List<Woman> ListWoman1 = new List<Woman>();            ListWoman1.Add(w1);            ListWoman1.Add(w2);            List<Person> ListPerson = new List<Person>();            Person p1 = new Person() { Id = 1, Name = "劉備", ListWoman = ListWoman1 };            Person p2 = new Person() { Id = 2, Name = "關(guān)羽", ListWoman = ListWoman1 };            Person p3 = new Person() { Id = 3, Name = "張飛", ListWoman = ListWoman1 };            ListPerson.Add(p1);            ListPerson.Add(p2);            ListPerson.Add(p3);            string xml = ListToXmlSerializer(ListPerson);            Console.WriteLine(xml);            MemoryStream mem = new MemoryStream(Encoding.UTF8.GetBytes(xml));            List<Person> ListPerson2 = XmlToListSerializer<Person>(mem);            Console.WriteLine(ListPerson2.Count);            Console.WriteLine(ListPerson2[2].ListWoman[1].Name);            Console.ReadKey();        }        //序列化Xml        public static string ListToXmlSerializer<T>(IList<T> ListT)        {            XmlSerializer ser = new XmlSerializer(ListT.GetType());            System.IO.MemoryStream mem = new MemoryStream();            XmlWriterSettings settings = new XmlWriterSettings();            settings.Indent = true;            settings.OmitXmlDeclaration = true;            settings.Encoding = Encoding.UTF8;            XmlWriter writer = XmlWriter.Create(mem, settings);            ser.Serialize(writer, ListT);            writer.Close();            string strtmp = Encoding.UTF8.GetString(mem.ToArray());            File.WriteAllText(@"D:\222.xml", strtmp);            return strtmp;        }        //反序列化Xml        public static List<T> XmlToListSerializer<T>(Stream stream)        {            using (StreamReader sr = new StreamReader(stream, System.Text.Encoding.UTF8))            {                XmlSerializer ser = new XmlSerializer(typeof(List<T>));                var listsch = ser.Deserialize(sr);                List<T> reses = listsch as List<T>;                return reses;            }        }    }    public class Person : IXmlSerializable    {        public int Id { get; set; }        public string Name { get; set; }        public IList<Woman> ListWoman { get; set; }        #region IXmlSerializable 成員        System.Xml.Schema.XmlSchema IXmlSerializable.GetSchema()        {            throw new NotImplementedException();        }        void IXmlSerializable.ReadXml(XmlReader reader)        {            //while (reader.Name == "Person")            //{            reader.ReadStartElement("Person");            Id = Convert.ToInt32(reader.ReadElementString("Id"));            Name = reader.ReadElementString("Name");            List<Woman> newWomans = new List<Woman>();            PropertyInfo[] ProArr = typeof(Woman).GetProperties();            reader.ReadStartElement("ListWoman");            while (reader.IsStartElement("Woman"))            {                Woman Item2 = new Woman();                reader.ReadStartElement("Woman");                foreach (PropertyInfo p in ProArr)                {                    string str = reader.ReadElementString(p.Name);                    p.SetValue(Item2, Convert.ChangeType(str, p.PropertyType), null);                }                reader.ReadEndElement();                reader.MoveToContent();                newWomans.Add(Item2);            }            ListWoman = newWomans;            reader.ReadEndElement();            reader.ReadEndElement();        }        void IXmlSerializable.WriteXml(XmlWriter writer)        {            writer.WriteElementString("Id", Id.ToString());            writer.WriteElementString("Name", Name);            writer.WriteStartElement("ListWoman");            foreach (Woman item in ListWoman)            {                PropertyInfo[] ProArr = item.GetType().GetProperties();                writer.WriteStartElement("Woman");                foreach (PropertyInfo p in ProArr)                {                    if (p.GetValue(item, null) != null)                    {                        writer.WriteElementString(p.Name, p.GetValue(item, null).ToString());                    }                    else                    {                        writer.WriteElementString(p.Name, "");                    }                }                writer.WriteEndElement();            }            writer.WriteEndElement();        }        #endregion    }    public class Woman    {        public int Id { get; set; }        public string Name { get; set; }    }}

  以上代碼輸出:

  

  特別提示,一定要特別特別注意,ReadStartElement與ReadEndElement的問(wèn)題,否則很容易出現反序列化集合時(shí)只能夠讀取第一個(gè)的情況。而對于序列化,如果WriteStartElement與WriteEndElement不匹配,出現的只是XML標簽對不匹配的問(wèn)題,沒(méi)Read的時(shí)候那么坑。

四、XML特性

  有時(shí),我們在序列化時(shí)想要自定義XML的結構,這時(shí)候就要用到我們的屬性類(lèi)了。屬性類(lèi)提供了很多特性供我們使用,以完成自定義序列化功能。

名稱(chēng)描述
XmlAttribute表示一個(gè)特性對象的集合,這些對象控制XmlSerializer如何序列化和反序列化對象
XmlArrayAttribute指定XmlSerializer應將特定的類(lèi)成員序列化為XML元素數組
XmlArrayItemAttribute指定XmlSerializer可以放置在序列化數組中的派生類(lèi)型
XmlArrayItemAttributes表示XmlArrayItemAttribute對象的集合
XmlAttributeAttribute指定XmlSerializer應將類(lèi)成員作為XML特性序列化
XmlChoiceIdentifierAttribute指定可以通過(guò)使用枚舉來(lái)進(jìn)一步消除成員的歧義
XmlElementAttribute在XmlSerializer序列化或反序列化包含對象時(shí),指示公共字段或屬性表示XML元素
XmlElementAttributes表示XmlElementAttribute的集合,XmlSerializer將其用于它重寫(xiě)序列化類(lèi)的默認方式
XmlEnumAttribute控制XmlSerializer如何序列化枚舉成員
XmlIgnoreAttribute指示XmlSerializer方法不序列化公共字段或公共讀/寫(xiě)屬性值
XmlIncludeAttribute允許XmlSerializer在它序列化或反序列化對象時(shí)識別類(lèi)型
XmlRootAttribute控制視為XML根元素的屬性目標的XML序列化
XmlTextAttribute當序列化或反序列化時(shí),想XmlSerializer指示應將此成員作為XML文本處理
XmlTypeAttribute控制當屬性目標由XmlSerializer序列化時(shí)生成的XML結構
XmlAnyAttributeAttribute指定成員(返回XmlAttribute對象的數組的字段)可以包含XML屬性
XmlAnyElementAttribute指定成員可以包含對象,該對象表示在序列化或反序列化的對象中沒(méi)有相應成員的所有XML元素
XmlAnyElementAttributes表示XmlAnyElementAttribute對象的集合
XmlAttributeEventArgs為UnKnowAttribute提供數據
XmlAttributeOverrides允許你在使用XmlSerializer序列化或反序列化時(shí)重寫(xiě)屬性、字段和類(lèi)特性
XmlElementEventArgs為UnknownElement事件提供數據
XmlNamespaceDeclarationsAttribute指定目標屬性、參數、返回值或類(lèi)成員包含與XML文檔中所用命名空間關(guān)聯(lián)的前綴
XmlNodeEventArgs為UnknownNode時(shí)間提供數據
XmlSerializer將對象序列化到XML文檔中和從XML文檔中反序列化對象,XmlSerializer使你得以控制如何將對象編碼到XML中
XmlSerializerNamespaces包含XmlSerializer用于在XML文檔實(shí)例中生成限定名的XML命名空間和前綴
XmlTypeMapping包含從一種類(lèi)型到另一種類(lèi)型的映射

  更多更詳細的說(shuō)明,可以在這里看到:http://msdn.microsoft.com/zh-cn/library/System.Xml.Serialization(v=vs.110).aspx

  下面僅僅給出兩個(gè)簡(jiǎn)單示例:

namespace 學(xué)習測試{    [Serializable]    public class Person    {        public Person() { }        public int Id { get; set; }        public string Name { get; set; }        [XmlAttribute(DataType = "string")]        public string Content { get; set; }        [XmlIgnore]        public int Age { get; set; }        [XmlArray]        [XmlArrayItem("Int32", typeof(Int32))]        public IList ListInt { get; set; }    }    class Program    {        static void Main(string[] args)        {            IList list = new ArrayList();            list.Add(1);            list.Add(2);            list.Add(3);            Person p = new Person();            p.Id = 1;            p.Name = "劉備";            p.Age = 23;            p.Content = "這是一個(gè)牛人";            p.ListInt = list;            string strXml = ObjectToXmlSerializer(p);            Console.WriteLine(strXml);            //反序列化IList還有問(wèn)題            //Person p2 = ObjectToXmlDESerializer<Person>(strXml);            //Console.WriteLine(p2.Name);            Console.ReadKey();        }        //序列化        public static string ObjectToXmlSerializer(Object Obj)        {            string XmlString = "";            XmlWriterSettings settings = new XmlWriterSettings();            //去除xml聲明            //settings.OmitXmlDeclaration = true;            settings.Indent = true;            settings.Encoding = Encoding.Default;            using (System.IO.MemoryStream mem = new MemoryStream())            {                using (XmlWriter writer = XmlWriter.Create(mem, settings))                {                    //去除默認命名空間xmlns:xsd和xmlns:xsi                    XmlSerializerNamespaces ns = new XmlSerializerNamespaces();                    ns.Add("", "");                    XmlSerializer formatter = new XmlSerializer(Obj.GetType());                    formatter.Serialize(writer, Obj, ns);                }                XmlString = Encoding.Default.GetString(mem.ToArray());            }            return XmlString;        }        //反序列化Xml        public static T ObjectToXmlDESerializer<T>(string str) where T : class        {            object obj;            using (System.IO.MemoryStream mem = new MemoryStream(Encoding.Default.GetBytes(str)))            {                using (XmlReader reader = XmlReader.Create(mem))                {                    XmlSerializer formatter = new XmlSerializer(typeof(T));                    obj = formatter.Deserialize(reader);                }            }            return obj as T;        }    }}

2013/12/27 常遇錯誤記錄:

反序列化錯誤提示:

1、XML 文檔(2, 2)中有錯誤:

  報這個(gè)錯誤一般是由于序列化與反序列化的類(lèi)型不一致:

 XmlSerialize.Serialize(@"C:\Person.xml",person);  //person 是 Person類(lèi)的對象var test = XmlSerialize.DeSerialize(typeof(Person), @"C:\Person.xml");

2014/08/12

2、XmlIgnore與NonSerialized的區別。

  1、XmlIgnore能作用于屬性,NonSerialized只作用于字段。

  2、XmlIgnore對序列化與反序列化均有效,而NonSerialized只影響序列化,反序列化不管。(非百分百確定)

本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
C#序列化和反序列化 (BinaryFormatter、SoapFormatter、XML序列化)
C# MemoryStream和BinaryFormatter
c# .net 將List序列化
asp.net 序列化 C#類(lèi) 到JSON字符串,JSON字符串 逆轉為 類(lèi)
XML和實(shí)體序列化和反序列化
為什么需要序列化,以及序列化的一些操作【收錄】
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久