主题:  XML串行化数据基础

蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
注册:2001/12/20 15:57:57
#12005/1/27 23:49:18
XML文档使用越来越普遍,我们常会把一些系统设置等文件用config或XML文档存文在程序目录下。.Net的串行化数据是一个很令人心动的技术,可以很方便地读取一定格式或保存成文件。下面做个简单了练习,对XML串行化作些初步了解。(注:我是在WINDOWS应用程序上做的练习,因怕建立ASP.NETA工程麻烦,下面一大堆东西。其实除了路径外,程序写法基本一致)。

先编写一个需要串行化的类,该类是设置一个操作权限的设置文件

using System;

namespace Hellosea.WinModule.Account.Configuration
{
    /// <summary>
    /// OperatePermissionSettings 的摘要说明。
    /// </summary>
    public class OperatePermissionSettings
    {
        public OperatePermissionSettings()
        { }

        public int SystemManage_Login;                    // 允许进入管理页面,为各管理角色所拥用的许可
        public int SystemManage_SystemSetting;        // 可以进行系统参数、安全等设置的许可

        public int UserManage_Enter;                    // 进入用户管理页面的许可
        public int UserManage_PurviewAssign;        // 可以分配或收回用户角色、许可等的权限
        public int UserManage_UserDelete;            // 可以中止用户帐号的许可
        public int UserManage_UserEdit;                // 可以编辑用户信息的许可
    }
}


串行化该类,并保存文件:

private void button1_Click(object sender, System.EventArgs e)
{
    // 建立操作权限类
    OperatePermissionSettings settings = new OperatePermissionSettings();
    settings.SystemManage_Login = 1;
    settings.SystemManage_SystemSetting = 2;
    settings.UserManage_Enter = 3;
    settings.UserManage_PurviewAssign = 4;
    settings.UserManage_UserEdit = 5;
    settings.UserManage_UserDelete = 6;

    // 文件流
    string filePath = Application.StartupPath + "\\OperatePermission.Config";
    FileStream fs = new FileStream(filePath, FileMode.Create);

    // 串行化数据
    XmlSerializer serializer = new XmlSerializer(typeof(OperatePermissionSettings));
    serializer.Serialize(fs, settings);

    // 关闭文件流
    fs.Close();
}


反串行化,从文件中读取数据

private void button2_Click(object sender, System.EventArgs e)
{
    OperatePermissionSettings settings = new OperatePermissionSettings();

    // 文件流
    string filePath = Application.StartupPath + "\\OperatePermission.Config";
    FileStream fs = new FileStream(filePath, FileMode.Open);

    // 反串行化数据
    XmlSerializer serializer = new XmlSerializer(typeof(OperatePermissionSettings));
    settings = (OperatePermissionSettings)serializer.Deserialize(fs);
            
    // 关闭文件流
    fs.Close();

    textBox1.Text = settings.SystemManage_Login.ToString();
    textBox2.Text = settings.SystemManage_SystemSetting.ToString();
    textBox3.Text = settings.UserManage_Enter.ToString();
    textBox4.Text = settings.UserManage_PurviewAssign.ToString();
    textBox5.Text = settings.UserManage_UserEdit.ToString();
    textBox6.Text = settings.UserManage_UserDelete.ToString();
}


当然需要用到二个命名空间
using System.IO;
using System.Xml.Serialization;

这是最简单的串行化,只作个范例。真正实现时,最好能对该方法用类包装起来,使用起来会有非常好的可读性。


非常大鱼

蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
注册:2001/12/20 15:57:57
#22005/1/27 23:55:25
忘了写OperatePermission.Config文档的结构了:
<?xml version="1.0"?>
<OperatePermissionSettings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <SystemManage_Login>1</SystemManage_Login>
    <SystemManage_SystemSetting>2</SystemManage_SystemSetting>
    <UserManage_Enter>3</UserManage_Enter>
    <UserManage_PurviewAssign>4</UserManage_PurviewAssign>
    <UserManage_UserDelete>6</UserManage_UserDelete>
    <UserManage_UserEdit>5</UserManage_UserEdit>
</OperatePermissionSettings>


非常大鱼

{ 在指尖上绽放的花朵 }

职务:普通成员
等级:5
金币:14.0
发贴:3209
注册:2002/7/25 21:24:11
#32005/1/28 0:08:11
对 .NET 技术还是不甚了解的说。。。。

一边找资料一边看 鲸兄 的帖子ing~~~~



majunant

职务:普通成员
等级:1
金币:1.0
发贴:37
注册:2001/10/8 3:35:52
#42005/1/28 9:02:52
版主都很强!

我正在努力学习中...