zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    个人永久性免费-Excel催化剂自定义函数实现带命名空间的xml文件元素信息提取
    拥有它从此看英文世界网页效率倍增,不会英文也能闯天下
    【功能迭代】Excel催化剂批量下载邮件信息及正文续篇
    个人永久性免费-Excel催化剂第130波批量下载邮件信息及正文
    [功能发布]Excel集成网页控件,内嵌于Excel单元格区域,可加载任意网页
    使用VBA时不妨借力Excel催化剂的能力,让你的开发更加轻松便捷
    介绍一个不错的轮子:MoreLINQ,原生LINQ增强,尤其适用于数据ETL/数据分析领域。
    [功能更新]PBI催化剂新增批量DAX表达式格式化及模型和报表层度量值使用状况分析
    [网页采集实战]使用Excel催化剂趴一下公众号里的各种软文,越是大号越没底线
    【综合实战】使用Excel催化剂低成本快速轻松搭建复杂灵活的高响应的业务系统-EasyShu激活码发放过程
  • 原文地址:https://www.cnblogs.com/androllen/p/2770729.html
Copyright © 2011-2022 走看看