【最佳实践系列】基于序列化技术的XML数据源操作模式

假定应用程序的输入数据来自于一个结构化的XML文件,那么首先我们要根据需要的数据格式设计类型(class),其中要求类型中的公共属性能够被XML序列化,例如Dictionary<T,T>类型就不能直接被序列化而List<T>则能够。保存数据时,直接将类型实例序列化到外部XML文件中即可;读取时则反序列化,这样能够简化XML文件的读写逻辑,有利于应用程序的快速实现。举例如下:

下面的例子需要引用using System.IO和using System.Xml.Serialization命名空间。

1、设计类型:两个表示学生信息的简单类

    /// <summary>
    /// 一个学生信息类
    /// </summary>
    //无需[Serializable]特性声明
    public class Student
    {
        public string Id { get; set; }
        public string Name { get; set; }
        public List<double> Scores { get; set; }
        public Student()
        {
            Id = string.Empty;
            Name = string.Empty;
            Scores = new List<double>();
        }
    }
    /// <summary>
    /// 某个班级的学生信息类
    /// </summary>
    public class ClassStudents
    {
        public string Class { get; set; }
        public List<Student> Students { get; set; }
        public ClassStudents()
        {
            Class = string.Empty;
            Students = new List<Student>();
        }
    }


2、XML文件的读写

    private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            Student s1 = new Student() { Id = "101", Name = "李明" };
            s1.Scores.Add(85);
            s1.Scores.Add(90);
            Student s2 = new Student() { Id = "102", Name = "张燕" };

            ClassStudents students = new ClassStudents() { Class = "三年一班" };
            students.Students.Add(s1);
            students.Students.Add(s2);

            //序列化XML
            XmlSerializer xSer = new XmlSerializer(typeof(ClassStudents)); //创建序列化对象
            using (FileStream fs = new FileStream("data.xml", FileMode.Create))
            {
                xSer.Serialize(fs, students); //将对象序列化到xml文件
            }

            //反序列化
            using (FileStream fs = new FileStream("data.xml", FileMode.Open))
            {
                var sts = xSer.Deserialize(fs); //将xml文件反序列化到对象(ClassStudents类型)
            }
        }

3、XML文件

<?xml version="1.0"?>
<ClassStudents xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Class>三年一班</Class>
  <Students>
    <Student>
      <Id>101</Id>
      <Name>李明</Name>
      <Scores>
        <double>85</double>
        <double>90</double>
      </Scores>
    </Student>
    <Student>
      <Id>102</Id>
      <Name>张燕</Name>
      <Scores />
    </Student>
  </Students>
</ClassStudents>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值