• WP7中对本地XML文件的序列化与反序列化


     

    1、两个用于序列化和反序列化的类  

     public class Family
        {
            public string FamilyName { get; set; }
            public int FamilyNum { get; set; }

        }

     public class Student
        {
            public int StuID { get; set; }

            public string StuName { get; set; }

            public string StuSchool { get; set; }

            public Family Fa { get; set; }    //属性Fa是Family类的对象
        }

    2.XMLFile.Xml 文件的内容

    <?xml version="1.0"?>
    <ArrayOfStudent xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Student>
        <StuID>1</StuID>
        <StuName>曹伟</StuName>
        <StuSchool>思远IT</StuSchool>
        <Fa>
          <FamilyName>FamilyOne</FamilyName>
          <FamilyNum>3</FamilyNum>
        </Fa>
      </Student>
      <Student>
        <StuID>2</StuID>
        <StuName>雷敏</StuName>
        <StuSchool>义宏小学</StuSchool>
        <Fa>
          <FamilyName>FamilyTwo</FamilyName>
          <FamilyNum>5</FamilyNum>
        </Fa>
      </Student>
      <Student>
        <StuID>3</StuID>
        <StuName>陈龙</StuName>
        <StuSchool>车胤中学</StuSchool>
        <Fa>
          <FamilyName>FamilyThree</FamilyName>
          <FamilyNum>6</FamilyNum>
        </Fa>
      </Student>
    </ArrayOfStudent> 

    3、PubXmlSerialize.cs

     public class PubXmlSerialize
        {
            /// <summary>
            /// 对象序列化成 XML String
            /// </summary>
            public static string XmlSerialize<T>(T obj)
            {
                string xmlString = string.Empty;
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
                using (MemoryStream ms = new MemoryStream())
                {
                    xmlSerializer.Serialize(ms, obj);
                    ms.Position = 0;
                    xmlString = new StreamReader(ms).ReadToEnd();

                }
                return xmlString;
            }

            /// <summary>
            /// XML String 反序列化成对象
            /// </summary>
            public static T XmlDeserialize<T>(string xmlString)
            {
                T t = default(T);
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
                using (Stream xmlStream = new MemoryStream(Encoding.UTF8.GetBytes(xmlString)))
                {
                    using (XmlReader xmlReader = XmlReader.Create(xmlStream))
                    {
                        Object obj = xmlSerializer.Deserialize(xmlReader);
                        t = (T)obj;
                    }
                }
                return t;
            }
        }

    一、一般对象集的序列化与反序列化

     List<Student> sss = new List<Student>
                    {
                      new Student{StuID=1,StuName="张三",StuSchool="school1",Fa=new Family(){FamilyName="name1",FamilyNum=3}},
                      new Student{StuID=1,StuName="李四",StuSchool="school2",Fa=new Family(){FamilyName="name2",FamilyNum=4}}

                    };

                string strXml = PubXmlSerialize.XmlSerialize<List<Student>>(sss);                           //序列化
                List<Student> students = PubXmlSerialize.XmlDeserialize<List<Student>>(strXml);  //反序列化

    二、Windows Phone7中对本地xml文件的操作

                注:获得本地xml文件学将xml文件的属性"建置动作"设置为Resource

                Stream  str = App.GetResourceStream(new Uri("/PhoneAppSerivable;component/XMLFile.xml", UriKind.Relative)).Stream;
                XDocument doc = XDocument.Load(str);    //加载本地xml文件

            
                List<Student> students = PubXmlSerialize.XmlDeserialize<List<Student>>(doc.ToString());   //反序列化为对象
             

    三、使用linq对xml文件进行遍历
                var v = from t in doc.Descendants("Student")
                        select new Student
                        {
                            StuID = int.Parse(t.Element("StuID").Value),
                            StuName = t.Element("StuName").Value,
                            StuSchool = t.Element("StuSchool").Value,
                            Fa = new Family
                            {
                                FamilyName = t.Element("Fa").Element("FamilyName").Value,
                                FamilyNum = int.Parse(t.Element("Fa").Element("FamilyNum").Value),
                            }
                        };
                students = v.ToList();

    ****:如果XML文件中引用了命名空间,则会出现“xml文件格式不正确”的错误,我们需要得到xml后将命名空间用Replace函数替换为空即可。

    http://www.xnwai.com/2012/06/windowsphone-serialization-xml-json.html

  • 相关阅读:
    《GDB常用基本》
    《Linux守护进程》
    <C语言知识点 —— 数组赋值字符串>
    《Linux知识点》
    玩转----select模块操作下拉框-selenium
    玩转----selenium--下拉框select
    玩转----selenium-滚动条的几种方式
    玩转----python-装饰器
    玩转----解决selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: invalid 'expiry'
    玩转----iframe框架怎样来定位,并说明iframe框架中不变和可变的属性分别是什么?多个iframe框架怎么处理?iframe和frame区别:
  • 原文地址:https://www.cnblogs.com/androllen/p/2770729.html
Copyright © 2020-2023  润新知